You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by be...@apache.org on 2009/03/24 21:28:13 UTC
svn commit: r758001 - in /labs/vysper: ./
src/main/java/org/apache/vysper/storage/jcr/roster/
src/main/java/org/apache/vysper/storage/jcr/vcardtemp/
src/main/java/org/apache/vysper/xmpp/modules/roster/
src/main/java/org/apache/vysper/xmpp/modules/roste...
Author: berndf
Date: Tue Mar 24 20:28:13 2009
New Revision: 758001
URL: http://svn.apache.org/viewvc?rev=758001&view=rev
Log:
[vysper] LABS-125 improve JCR persistence
Modified:
labs/vysper/build.xml
labs/vysper/src/main/java/org/apache/vysper/storage/jcr/roster/JcrRoster.java
labs/vysper/src/main/java/org/apache/vysper/storage/jcr/roster/JcrRosterManager.java
labs/vysper/src/main/java/org/apache/vysper/storage/jcr/vcardtemp/JcrVcardTempPersistenceManager.java
labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterModule.java
labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/MemoryRosterManager.java
labs/vysper/src/main/java/org/apache/vysper/xmpp/server/ServerMain.java
Modified: labs/vysper/build.xml
URL: http://svn.apache.org/viewvc/labs/vysper/build.xml?rev=758001&r1=758000&r2=758001&view=diff
==============================================================================
--- labs/vysper/build.xml (original)
+++ labs/vysper/build.xml Tue Mar 24 20:28:13 2009
@@ -87,6 +87,7 @@
<pathelement location="${basedir}/lib/log4j-1.2.14.jar"/>
<pathelement location="${basedir}/lib/slf4j-api-1.5.3.jar"/>
<pathelement location="${basedir}/lib/slf4j-log4j12-1.5.3.jar"/>
+ <pathelement location="${basedir}/lib/jackrabbit-standalone-1.5.3.jar"/>
</path>
<patternset id="excluded.from.vysper">
@@ -103,6 +104,12 @@
</dirset>
</path>
+ <path id="apt-classpath">
+ <path refid="classpath" />
+ <fileset file="${vysper.output.dir}" />
+ <fileset file="${java.home}/" />
+ </path>
+
<path id="test.sourcepath">
<dirset dir="${basedir}">
<include name="src/test/java"/>
@@ -147,11 +154,11 @@
<target name="generate-compliance-doc" description="generates the compliance document" >
<apt factory="org.apache.vysper.compliance.reporting.DocumentSpecCompliantAnnotationFactory"
debug="false" verbose="true"
- preprocessdir="sourcepath"
- compile="true"
+ preprocessdir="${basedir}/build/ant/apidocs"
+ compile="false"
>
- <bootclasspath refid="bootclasspath"/>
- <classpath refid="classpath"/>
+ <bootclasspath refid="apt-classpath"/>
+ <classpath refid="classpath"/>
<src refid="sourcepath"/>
</apt>
</target>
Modified: labs/vysper/src/main/java/org/apache/vysper/storage/jcr/roster/JcrRoster.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/storage/jcr/roster/JcrRoster.java?rev=758001&r1=758000&r2=758001&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/storage/jcr/roster/JcrRoster.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/storage/jcr/roster/JcrRoster.java Tue Mar 24 20:28:13 2009
@@ -17,9 +17,13 @@
package org.apache.vysper.storage.jcr.roster;
import org.apache.vysper.storage.jcr.JcrStorage;
+import org.apache.vysper.storage.jcr.JcrStorageException;
import org.apache.vysper.xmpp.modules.roster.MutableRoster;
import org.apache.vysper.xmpp.modules.roster.RosterItem;
import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
@@ -28,6 +32,8 @@
*/
public class JcrRoster extends MutableRoster {
+ final Logger logger = LoggerFactory.getLogger(JcrRoster.class);
+
protected JcrStorage jcrStorage;
protected Entity jid;
@@ -38,14 +44,20 @@
@Override
public void addItem(RosterItem rosterItem) {
- final Node node = JcrRosterManager.retrieveRosterNode(jcrStorage, jid);
+ Node entityNode = null;
+ try {
+ entityNode = jcrStorage.getEntityNode(jid, NamespaceURIs.JABBER_IQ_ROSTER, true);
+ } catch (JcrStorageException e) {
+ logger.warn("failed to create roster node for owner = " + jid.getFullQualifiedName());
+ return;
+ }
Node contactNode = null;
try {
- contactNode = node.addNode(rosterItem.getJid().getBareJID().getFullQualifiedName());
+ contactNode = entityNode.addNode(rosterItem.getJid().getBareJID().getFullQualifiedName());
contactNode.save();
} catch (RepositoryException e) {
throw new RuntimeException("failed to create roster item for owner = " + jid.getFullQualifiedName() +
- " and contact " + rosterItem.getJid().getFullQualifiedName());
+ " and contact = " + rosterItem.getJid().getFullQualifiedName());
}
try {
@@ -56,7 +68,7 @@
contactNode.save();
} catch (RepositoryException e) {
throw new RuntimeException("failed to set roster properties for owner = " + jid.getFullQualifiedName() +
- " and contact " + rosterItem.getJid().getFullQualifiedName());
+ " and contact = " + rosterItem.getJid().getFullQualifiedName());
}
}
}
Modified: labs/vysper/src/main/java/org/apache/vysper/storage/jcr/roster/JcrRosterManager.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/storage/jcr/roster/JcrRosterManager.java?rev=758001&r1=758000&r2=758001&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/storage/jcr/roster/JcrRosterManager.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/storage/jcr/roster/JcrRosterManager.java Tue Mar 24 20:28:13 2009
@@ -16,20 +16,35 @@
***********************************************************************/
package org.apache.vysper.storage.jcr.roster;
-import org.apache.vysper.xmpp.modules.roster.persistence.AbstractRosterManager;
-import org.apache.vysper.xmpp.modules.roster.Roster;
-import org.apache.vysper.xmpp.modules.roster.MutableRoster;
-import org.apache.vysper.xmpp.addressing.Entity;
-import org.apache.vysper.xmpp.protocol.NamespaceURIs;
import org.apache.vysper.storage.jcr.JcrStorage;
import org.apache.vysper.storage.jcr.JcrStorageException;
+import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.addressing.EntityImpl;
+import org.apache.vysper.xmpp.addressing.EntityFormatException;
+import org.apache.vysper.xmpp.modules.roster.AskSubscriptionType;
+import org.apache.vysper.xmpp.modules.roster.Roster;
+import org.apache.vysper.xmpp.modules.roster.RosterException;
+import org.apache.vysper.xmpp.modules.roster.RosterGroup;
+import org.apache.vysper.xmpp.modules.roster.RosterItem;
+import org.apache.vysper.xmpp.modules.roster.SubscriptionType;
+import org.apache.vysper.xmpp.modules.roster.persistence.AbstractRosterManager;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.Property;
+import javax.jcr.RepositoryException;
+import java.util.List;
+import java.util.ArrayList;
/**
*/
public class JcrRosterManager extends AbstractRosterManager {
+ final Logger logger = LoggerFactory.getLogger(JcrRosterManager.class);
+
protected JcrStorage jcrStorage;
public JcrRosterManager(JcrStorage jcrStorage) {
@@ -45,12 +60,70 @@
}
}
+ @Override
protected Roster retrieveRosterInternal(Entity bareJid) {
- final Node node = retrieveRosterNode(jcrStorage, bareJid);
- if (node == null) return null;
- return null;
+ final Node rosterNode = retrieveRosterNode(jcrStorage, bareJid);
+
+ JcrRoster roster = new JcrRoster(jcrStorage, bareJid);
+
+ NodeIterator nodes = null;
+ try {
+ nodes = rosterNode.getNodes("contact");
+ } catch (RepositoryException e) {
+ return roster;
+ }
+ while (nodes != null && nodes.hasNext()) {
+ Node node = nodes.nextNode();
+ String contactJidString = readAttribute(node, "jid");
+ EntityImpl contactJid = null;
+ if (contactJidString != null) {
+ try {
+ contactJid = EntityImpl.parse(contactJidString);
+ } catch (EntityFormatException e) {
+ logger.warn("when loading roster for user {} parsing contact jid {}", bareJid, contactJidString);
+ }
+ }
+ if (contactJid == null) {
+ logger.warn("when loading roster for user {}, skipping a contact due to missing or unparsable jid", bareJid);
+ }
+
+ String name = readAttribute(node, "name");
+ String typeString = readAttribute(node, "type");
+ SubscriptionType subscriptionType = null;
+ try {
+ subscriptionType = SubscriptionType.valueOf(typeString);
+ } catch (IllegalArgumentException e) {
+ logger.warn("when loading roster for user {}, contact {} misses a subscription type", bareJid, contactJid);
+ }
+ String askTypeString = readAttribute(node, "askType");
+ AskSubscriptionType askSubscriptionType = AskSubscriptionType.NOT_SET;
+ try {
+ if (askTypeString != null) askSubscriptionType = AskSubscriptionType.valueOf(askTypeString);
+ } catch (IllegalArgumentException e) {
+ logger.warn("when loading roster for user {}, contact {}, the ask subscription type is unparsable. skipping!", bareJid, contactJid);
+ continue; // don't return it, don't set a default!
+ }
+
+ List<RosterGroup> groups = new ArrayList<RosterGroup>();
+ // TODO read groups
+
+ RosterItem item = new RosterItem(contactJid, name, subscriptionType, askSubscriptionType, groups);
+ roster.addItem(item);
+ }
+ return roster;
+ }
+
+ private String readAttribute(Node node, String propertyName) {
+ try {
+ Property property = node.getProperty(propertyName);
+ if (property == null) return null;
+ return property.getString();
+ } catch (RepositoryException e) {
+ return null;
+ }
}
+ @Override
protected Roster addNewRosterInternal(Entity jid) {
JcrRoster mutableRoster = new JcrRoster(jcrStorage, jid);
@@ -62,4 +135,59 @@
return mutableRoster;
}
+
+ @Override
+ public void addContact(Entity jid, RosterItem rosterItem) throws RosterException {
+ if (jid == null) throw new RosterException("jid not provided");
+ Node entityNode = null;
+ try {
+ entityNode = jcrStorage.getEntityNode(jid, NamespaceURIs.JABBER_IQ_ROSTER, true);
+ } catch (JcrStorageException e) {
+ throw new RosterException("failed to create roster store for " + jid.getFullQualifiedName(), e);
+ }
+ try {
+ Node contactNode = entityNode.addNode("contact" + System.currentTimeMillis());
+ //contactNode.setProperty("jid", rosterItem.getJid().getBareJID().getFullQualifiedName());
+ //if (rosterItem.getName() != null) contactNode.setProperty("name", rosterItem.getName());
+ //contactNode.setProperty("type", rosterItem.getSubscriptionType().value());
+ //if (rosterItem.getAskSubscriptionType() != AskSubscriptionType.NOT_SET) contactNode.setProperty("askType", rosterItem.getAskSubscriptionType().value());
+ contactNode.save();
+ } catch (RepositoryException e) {
+ throw new RosterException("failed to add contact node to roster for user = " + jid.getFullQualifiedName() + " and contact jid = " + rosterItem.getJid().getFullQualifiedName(), e);
+ }
+ }
+
+ @Override
+ public void removeContact(Entity jidUser, Entity jidContact) throws RosterException {
+ if (jidUser == null) throw new RosterException("jid not provided");
+ if (jidContact == null) throw new RosterException("contact jid not provided");
+ Node rosterNode = null;
+ try {
+ rosterNode = jcrStorage.getEntityNode(jidUser, NamespaceURIs.JABBER_IQ_ROSTER, false);
+ } catch (JcrStorageException e) {
+ throw new RosterException("failed to retrieve roster store for " + jidUser.getFullQualifiedName(), e);
+ }
+ if (rosterNode == null) return; // done, no contacts anyway. oops
+
+ NodeIterator nodes = null;
+ try {
+ nodes = rosterNode.getNodes("contact");
+ } catch (RepositoryException e) {
+ return; // failed to find any contacts, done.
+ }
+ boolean foundOne = false;
+ while (nodes != null && nodes.hasNext()) {
+ Node node = nodes.nextNode();
+ String contactJidString = readAttribute(node, "jid");
+ if (contactJidString != null && contactJidString.equals(jidContact.getFullQualifiedName())) {
+ foundOne = true;
+ try {
+ node.remove();
+ } catch (RepositoryException e) {
+ logger.warn("failed to remove from roster for user {} the contact jid " + jidContact, jidUser, e);
+ }
+ }
+ }
+ if (!foundOne) logger.warn("failed to remove from roster for user {} the contact jid {}", jidUser, jidContact);
+ }
}
Modified: labs/vysper/src/main/java/org/apache/vysper/storage/jcr/vcardtemp/JcrVcardTempPersistenceManager.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/storage/jcr/vcardtemp/JcrVcardTempPersistenceManager.java?rev=758001&r1=758000&r2=758001&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/storage/jcr/vcardtemp/JcrVcardTempPersistenceManager.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/storage/jcr/vcardtemp/JcrVcardTempPersistenceManager.java Tue Mar 24 20:28:13 2009
@@ -71,6 +71,7 @@
Node entityNode = getEntityNodeSave(entity, true);
try {
entityNode.setProperty("content", xml);
+ entityNode.save();
return true;
} catch (RepositoryException e) {
return false;
Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterModule.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterModule.java?rev=758001&r1=758000&r2=758001&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterModule.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterModule.java Tue Mar 24 20:28:13 2009
@@ -16,9 +16,10 @@
***********************************************************************/
package org.apache.vysper.xmpp.modules.roster;
+import org.apache.vysper.storage.jcr.JcrStorage;
+import org.apache.vysper.storage.jcr.roster.JcrRosterManager;
import org.apache.vysper.xmpp.modules.DefaultModule;
import org.apache.vysper.xmpp.modules.ServerRuntimeContextService;
-import org.apache.vysper.xmpp.modules.roster.persistence.MemoryRosterManager;
import org.apache.vysper.xmpp.protocol.HandlerDictionary;
import java.util.List;
@@ -45,7 +46,7 @@
@Override
protected void addServerServices(List<ServerRuntimeContextService> serviceList) {
- //serviceList.add(new JcrRosterManager(JcrStorage.getInstance()));
- serviceList.add(new MemoryRosterManager());
+ serviceList.add(new JcrRosterManager(JcrStorage.getInstance()));
+ //serviceList.add(new MemoryRosterManager());
}
}
\ No newline at end of file
Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/MemoryRosterManager.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/MemoryRosterManager.java?rev=758001&r1=758000&r2=758001&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/MemoryRosterManager.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/MemoryRosterManager.java Tue Mar 24 20:28:13 2009
@@ -30,12 +30,14 @@
private Map<Entity, MutableRoster> rosterMap = new HashMap<Entity, MutableRoster>();
+ @Override
protected Roster addNewRosterInternal(Entity jid) {
MutableRoster mutableRoster = new MutableRoster();
rosterMap.put(jid.getBareJID(), (MutableRoster) mutableRoster);
return mutableRoster;
}
+ @Override
protected Roster retrieveRosterInternal(Entity bareJid) {
if (!rosterMap.containsKey(bareJid)) rosterMap.put(bareJid, new MutableRoster());
return rosterMap.get(bareJid);
Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/server/ServerMain.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/server/ServerMain.java?rev=758001&r1=758000&r2=758001&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/server/ServerMain.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/server/ServerMain.java Tue Mar 24 20:28:13 2009
@@ -17,13 +17,14 @@
package org.apache.vysper.xmpp.server;
import org.apache.vysper.mina.TCPEndpoint;
-import org.apache.vysper.stanzasession.StanzaSessionFactory;
import org.apache.vysper.storage.jcr.JcrStorage;
import org.apache.vysper.storage.jcr.user.JcrUserManagement;
import org.apache.vysper.xmpp.authorization.AccountCreationException;
import org.apache.vysper.xmpp.modules.extension.xep0054_vcardtemp.VcardTempModule;
import org.apache.vysper.xmpp.modules.extension.xep0092_software_version.SoftwareVersionModule;
import org.apache.vysper.xmpp.modules.extension.xep0202_entity_time.EntityTimeModule;
+import org.apache.vysper.xmpp.addressing.EntityImpl;
+import org.apache.vysper.xmpp.addressing.EntityFormatException;
import java.io.File;
@@ -37,21 +38,20 @@
* found on the classpath
* @param args
*/
- public static void main(String[] args) throws AccountCreationException {
- //new ClassPathXmlApplicationContext("spring-config.xml");
+ public static void main(String[] args) throws AccountCreationException, EntityFormatException {
final JcrStorage jcrStorage = JcrStorage.getInstance();
final JcrUserManagement userManagement = new JcrUserManagement(jcrStorage);
//SimpleUserAuthorization userManagement = new SimpleUserAuthorization();
- //userManagement.addUser("user1@vysper.org", "password1");
- //userManagement.addUser("user2@vysper.org", "password1");
- //userManagement.addUser("user3@vysper.org", "password1");
+ if(!userManagement.verifyAccountExists(EntityImpl.parse("user1@vysper.org"))) userManagement.addUser("user1@vysper.org", "password1");
+ if(!userManagement.verifyAccountExists(EntityImpl.parse("user2@vysper.org"))) userManagement.addUser("user2@vysper.org", "password1");
+ if(!userManagement.verifyAccountExists(EntityImpl.parse("user3@vysper.org"))) userManagement.addUser("user3@vysper.org", "password1");
XMPPServer server = new XMPPServer("vysper.org");
server.addEndpoint(new TCPEndpoint());
- server.addEndpoint(new StanzaSessionFactory());
+ //server.addEndpoint(new StanzaSessionFactory());
server.setUserAuthorization(userManagement);
server.setAccountVerification(userManagement);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org