You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by be...@apache.org on 2013/07/08 11:51:48 UTC

[9/9] git commit: HBase storage: extract generic persistence manager for XEPs like vcard and private data, add vcard storage for HBase

HBase storage: extract generic persistence manager for XEPs like vcard and private data, add vcard storage for HBase


Project: http://git-wip-us.apache.org/repos/asf/mina-vysper/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-vysper/commit/9ffe7f30
Tree: http://git-wip-us.apache.org/repos/asf/mina-vysper/tree/9ffe7f30
Diff: http://git-wip-us.apache.org/repos/asf/mina-vysper/diff/9ffe7f30

Branch: refs/heads/master
Commit: 9ffe7f302900bad22c52e90cb098f31c4f19b0ad
Parents: 1b50d19
Author: Bernd Fondermann <be...@brainlounge.de>
Authored: Mon Jul 8 11:40:57 2013 +0200
Committer: Bernd Fondermann <be...@brainlounge.de>
Committed: Mon Jul 8 11:40:57 2013 +0200

----------------------------------------------------------------------
 .../hbase/HBaseGenericXEPDataManager.java       | 76 ++++++++++++++++++++
 .../hbase/HBaseStorageProviderRegistry.java     |  2 +
 .../HBasePrivateDataPersistenceManager.java     | 59 ++-------------
 .../vcard/HBaseVcardTempPersistenceManager.java | 56 +++++++++++++++
 4 files changed, 140 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-vysper/blob/9ffe7f30/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseGenericXEPDataManager.java
----------------------------------------------------------------------
diff --git a/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseGenericXEPDataManager.java b/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseGenericXEPDataManager.java
new file mode 100644
index 0000000..54416a2
--- /dev/null
+++ b/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseGenericXEPDataManager.java
@@ -0,0 +1,76 @@
+package org.apache.vysper.storage.hbase;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.hadoop.hbase.client.HTableInterface;
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.client.Result;
+import org.apache.vysper.xmpp.addressing.Entity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+import static org.apache.vysper.storage.hbase.HBaseStorage.COLUMN_FAMILY_NAME_XEP;
+import static org.apache.vysper.storage.hbase.HBaseStorage.COLUMN_FAMILY_NAME_XEP_BYTES;
+import static org.apache.vysper.storage.hbase.HBaseStorage.TABLE_NAME_USER;
+import static org.apache.vysper.storage.hbase.HBaseUtils.asBytes;
+import static org.apache.vysper.storage.hbase.HBaseUtils.entityAsBytes;
+import static org.apache.vysper.storage.hbase.HBaseUtils.toStr;
+
+/**
+ */
+public abstract class HBaseGenericXEPDataManager {
+    final Logger logger = LoggerFactory.getLogger(HBaseGenericXEPDataManager.class);
+    
+    protected HBaseStorage hbaseStorage;
+
+    public HBaseGenericXEPDataManager(HBaseStorage hbaseStorage) {
+        this.hbaseStorage = hbaseStorage;
+    }
+
+    protected abstract String getNamespace();
+
+    protected String getColumnForKey(String key) {
+        return getNamespace() + "#"+ key;
+    }
+
+    public boolean isAvailable() {
+        HTableInterface table = null;
+        try {
+            table = hbaseStorage.getTable(TABLE_NAME_USER);
+            return table != null;
+        } finally {
+            hbaseStorage.putTable(table);
+        }
+    }
+
+    protected boolean setValue(Entity entity, String key, String xml) {
+        if (key == null || StringUtils.isBlank(key)) {
+            throw new IllegalArgumentException("key must not be blank, empty or null");
+        }
+        String column = getColumnForKey(key);
+
+        final Put put = new Put(entityAsBytes(entity.getBareJID()));
+        put.add(COLUMN_FAMILY_NAME_XEP_BYTES, asBytes(column), asBytes(xml));
+
+        HTableInterface table = null;
+        try {
+            table = hbaseStorage.getTable(TABLE_NAME_USER);
+            table.put(put);
+            logger.debug("stored private data for {} with key {}", entity, key);
+            return true;
+        } catch (IOException e) {
+            logger.warn("failed to save private data for {} with key {}", entity, key);
+            return false;
+        } finally {
+            hbaseStorage.putTable(table);
+        }
+    }
+
+    protected String getValue(Entity entity, String key) {
+        final Result entityRow = hbaseStorage.getEntityRow(entity, COLUMN_FAMILY_NAME_XEP);
+
+        String column = getColumnForKey(key);
+        return toStr(entityRow.getValue(COLUMN_FAMILY_NAME_XEP_BYTES, asBytes(column)));
+    }
+}

http://git-wip-us.apache.org/repos/asf/mina-vysper/blob/9ffe7f30/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseStorageProviderRegistry.java
----------------------------------------------------------------------
diff --git a/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseStorageProviderRegistry.java b/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseStorageProviderRegistry.java
index 5b86ad4..509dc7a 100644
--- a/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseStorageProviderRegistry.java
+++ b/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/HBaseStorageProviderRegistry.java
@@ -23,6 +23,7 @@ import org.apache.vysper.storage.OpenStorageProviderRegistry;
 import org.apache.vysper.storage.hbase.privatedata.HBasePrivateDataPersistenceManager;
 import org.apache.vysper.storage.hbase.roster.HBaseRosterManager;
 import org.apache.vysper.storage.hbase.user.HBaseUserManagement;
+import org.apache.vysper.storage.hbase.vcard.HBaseVcardTempPersistenceManager;
 
 /**
  *
@@ -34,6 +35,7 @@ public class HBaseStorageProviderRegistry extends OpenStorageProviderRegistry {
         add(new HBaseUserManagement(HBaseStorage.getInstance()));
         add(new HBaseRosterManager(HBaseStorage.getInstance()));
         add(new HBasePrivateDataPersistenceManager(HBaseStorage.getInstance()));
+        add(new HBaseVcardTempPersistenceManager(HBaseStorage.getInstance()));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/mina-vysper/blob/9ffe7f30/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/privatedata/HBasePrivateDataPersistenceManager.java
----------------------------------------------------------------------
diff --git a/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/privatedata/HBasePrivateDataPersistenceManager.java b/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/privatedata/HBasePrivateDataPersistenceManager.java
index 4024b59..322bb77 100644
--- a/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/privatedata/HBasePrivateDataPersistenceManager.java
+++ b/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/privatedata/HBasePrivateDataPersistenceManager.java
@@ -19,10 +19,7 @@
  */
 package org.apache.vysper.storage.hbase.privatedata;
 
-import org.apache.commons.lang.StringUtils;
-import org.apache.hadoop.hbase.client.HTableInterface;
-import org.apache.hadoop.hbase.client.Put;
-import org.apache.hadoop.hbase.client.Result;
+import org.apache.vysper.storage.hbase.HBaseGenericXEPDataManager;
 import org.apache.vysper.storage.hbase.HBaseStorage;
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.modules.extension.xep0049_privatedata.PrivateDataPersistenceManager;
@@ -30,73 +27,29 @@ import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-
-import static org.apache.vysper.storage.hbase.HBaseStorage.*;
-import static org.apache.vysper.storage.hbase.HBaseUtils.*;
-
 /**
  * @author The Apache MINA Project (dev@mina.apache.org)
  */
-public class HBasePrivateDataPersistenceManager implements PrivateDataPersistenceManager {
+public class HBasePrivateDataPersistenceManager extends HBaseGenericXEPDataManager implements PrivateDataPersistenceManager {
 
     final Logger logger = LoggerFactory.getLogger(HBasePrivateDataPersistenceManager.class);
 
-    protected HBaseStorage hbaseStorage;
-
     public HBasePrivateDataPersistenceManager(HBaseStorage hbaseStorage) {
-        this.hbaseStorage = hbaseStorage;
+        super(hbaseStorage);
     }
 
+    @Override
     protected String getNamespace() {
         return NamespaceURIs.PRIVATE_DATA;
     }
-    
-    public boolean isAvailable() {
-        HTableInterface table = null;
-        try {
-            table = hbaseStorage.getTable(TABLE_NAME_USER);
-            return table != null;
-        } finally {
-            hbaseStorage.putTable(table);
-        }
-    }
 
     public String getPrivateData(Entity entity, String key) {
-        final Result entityRow = hbaseStorage.getEntityRow(entity, COLUMN_FAMILY_NAME_XEP);
-
-        String column = getColumnForKey(key);
-        String value = toStr(entityRow.getValue(COLUMN_FAMILY_NAME_XEP_BYTES, asBytes(column)));
-        
+        String value = getValue(entity, key);
         return value;
     }
 
-    protected String getColumnForKey(String key) {
-        return getNamespace() + "#"+ key;
-    }
-
     public boolean setPrivateData(Entity entity, String key, String xml) {
-
-        if (key == null || StringUtils.isBlank(key)) {
-            throw new IllegalArgumentException("private data key must not be blank");
-        }
-        String column = getColumnForKey(key);
-        
-        final Put put = new Put(entityAsBytes(entity.getBareJID()));
-        put.add(COLUMN_FAMILY_NAME_XEP_BYTES, asBytes(column), asBytes(xml));
-
-        HTableInterface table = null;
-        try {
-            table = hbaseStorage.getTable(TABLE_NAME_USER);
-            table.put(put);
-            logger.debug("stored private data for {} with key {}", entity, key);
-            return true;
-        } catch (IOException e) {
-            logger.warn("failed to save private data for {} with key {}", entity, key);
-            return false;
-        } finally {
-            hbaseStorage.putTable(table);
-        }
+        return setValue(entity, key, xml);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/mina-vysper/blob/9ffe7f30/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/vcard/HBaseVcardTempPersistenceManager.java
----------------------------------------------------------------------
diff --git a/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/vcard/HBaseVcardTempPersistenceManager.java b/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/vcard/HBaseVcardTempPersistenceManager.java
new file mode 100644
index 0000000..550f8af
--- /dev/null
+++ b/server/storage/hbase/src/main/java/org/apache/vysper/storage/hbase/vcard/HBaseVcardTempPersistenceManager.java
@@ -0,0 +1,56 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.vysper.storage.hbase.vcard;
+
+import org.apache.vysper.storage.hbase.HBaseGenericXEPDataManager;
+import org.apache.vysper.storage.hbase.HBaseStorage;
+import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.modules.extension.xep0054_vcardtemp.VcardTempPersistenceManager;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ */
+public class HBaseVcardTempPersistenceManager extends HBaseGenericXEPDataManager implements VcardTempPersistenceManager {
+
+    final Logger logger = LoggerFactory.getLogger(HBaseVcardTempPersistenceManager.class);
+    
+    private static final String KEY = "vcard";
+
+    public HBaseVcardTempPersistenceManager(HBaseStorage hbaseStorage) {
+        super(hbaseStorage);
+    }
+
+    @Override
+    protected String getNamespace() {
+        return NamespaceURIs.VCARD_TEMP;
+    }
+
+    public String getVcard(Entity entity) {
+        return getValue(entity, KEY);
+    }
+
+    public boolean setVcard(Entity entity, String xml) {
+        return setValue(entity, KEY, xml);
+    }
+}