Author: dlanglais Date: 2010-01-27 13:20:57 +0100 (Wed, 27 Jan 2010) New Revision: 24 Added: trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/ trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Cell.java trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/CellImpl.java trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Column.java trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/ColumnImpl.java trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/DataBase.java trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Row.java trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/RowImpl.java trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Structure.java trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/StructureImpl.java trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Table.java trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/TableImpl.java trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/package-info.java Modified: trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/OurHashMap.java trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/nvBigTable.java trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/package-info.java Log: Alors, je commit ce que j'avais commenc?\195?\169 sur une impl?\195?\169mentation de la spec bigtable ?\195?\160 l'aide de hashmap... Bon, je ne sais pas si ?\195?\167a vient de mon netbeans ou pas... Mais il semblerait qu'il y ait un probl?\195?\168me avec le package plugins... Comme s'il n'?\195?\169tait pas vu comme un package... Modified: trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/OurHashMap.java =================================================================== --- trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/OurHashMap.java 2010-01-26 22:45:17 UTC (rev 23) +++ trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/OurHashMap.java 2010-01-27 12:20:57 UTC (rev 24) @@ -3,8 +3,6 @@ import java.util.HashMap; import java.util.Set; -import org.nuiton.mapstoragemanager.plugins.BigTable; - public class OurHashMap implements BigTable{ HashMap<String,String> map = new HashMap<String, String>(); Added: trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Cell.java =================================================================== --- trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Cell.java (rev 0) +++ trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Cell.java 2010-01-27 12:20:57 UTC (rev 24) @@ -0,0 +1,21 @@ +package org.nuiton.mapstoragemanager.plugins.bighashmap; + +/** + * Interface listant les opérations nécéssaires sur une cellule. + * @author Dorian Langlais + * + * @param <T> type d'objet contenu dans les cellules. + */ +public interface Cell < T > { + + /** + * Récupère le contenu le plus récent de la cellule. + * @return retourne l'objet le plus récent stocké dans la cellule. + */ + T get(); + /** + * Ajout de contenu dans la cellule. + * @param t objet de type < T > à stocker dans la cellule. + */ + void put(T t); +} Added: trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/CellImpl.java =================================================================== --- trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/CellImpl.java (rev 0) +++ trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/CellImpl.java 2010-01-27 12:20:57 UTC (rev 24) @@ -0,0 +1,71 @@ +package org.nuiton.mapstoragemanager.plugins.bighashmap; + +import java.util.HashMap; +import java.util.Map; +import java.util.NoSuchElementException; + +/** + * Classe Cell. + * Une cellule (selon la spec bigtable de google) est une Map entre un + * timestamp et un contenu. + * @param <T> Une cellule est paramétrée selon son type de contenu. + * @author dorian Langlais, amaury Fages, gilles Crieloue, florent Gilet. + * @licence GPL. + */ +public class CellImpl < T /**extends Serializable*/ > implements Cell < T > { + + /** + * Cellule. + * hashMap ayant pour clé le timestamp et pour valeur un objet de type T. + */ + private Map < Long, T > cell; + + /** + * Constructeur par défaut. + */ + public CellImpl() { + this.cell = new HashMap < Long, T > (); + } + + /** + * Constructeur avec un objet. + * @param t objet à mettre dans la cellule à construire. + */ + public CellImpl(T t) { + this.cell = new HashMap < Long, T > (); + this.put(t); + } + + /** + * {@inheritDoc} + */ + public final void put(final T t) { + cell.put(System.currentTimeMillis(), t); + } + + /** + * get(Long timestamp). + * fonction d'accès au contenu d'une cellule en fonction de son timestamp. + * @param timestamp Timestamps d'une cellule. + * @return retourne le contenu de la cellule. + */ + public final T get(final Long timestamp) { + return cell.get(timestamp); + } + + /** + * {@inheritDoc} + */ + public final T get() { + if (cell.size() == 0) { + throw new NoSuchElementException(); + } + Long max = cell.keySet().iterator().next(); + for (Long current : cell.keySet()) { + if (max > current) { + max = current; + } + } + return cell.get(max); + } +} Added: trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Column.java =================================================================== --- trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Column.java (rev 0) +++ trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Column.java 2010-01-27 12:20:57 UTC (rev 24) @@ -0,0 +1,23 @@ +package org.nuiton.mapstoragemanager.plugins.bighashmap; + +/** + * Interface représentant les méthodes nécéssaires sur une colonne. + * @author Dorian Langlais + * + * @param <T> type d'objet contenu dans la colonne. + */ +public interface Column < T > { + + /** + * Récupère le contenu de la cellule ayant pour clé key. + * @param key clé de la ligne. + * @return objet stocké dans la celulle ayant pour clé key. + */ + T get(String key); + /** + * Ajoute l'objet t à la ligne de clé key. + * @param key clé de la ligne. + * @param t objet à stocker. + */ + void put(String key, T t); +} Added: trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/ColumnImpl.java =================================================================== --- trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/ColumnImpl.java (rev 0) +++ trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/ColumnImpl.java 2010-01-27 12:20:57 UTC (rev 24) @@ -0,0 +1,61 @@ +package org.nuiton.mapstoragemanager.plugins.bighashmap; + +import java.util.HashMap; +import java.util.Map; +import java.util.NoSuchElementException; + +/** + * Classe Column. + * @param <T> Type de contenu des cellules. + * @author dorian Langlais, amaury Fages, gilles Crieloue, florent Gilet. + * @licence GPL. + */ +public class ColumnImpl < T /**extends Serializable*/ > implements Column < T > { + + /** + * Colonne. + * hashMap ayant pour clé la "clé" de la "ligne" de la table et pour + * valeur le contenu de la cellule. + */ + private Map < String, CellImpl < T > > column; + + /** + * Constructeur par défaut. + */ + public ColumnImpl() { + column = new HashMap < String, CellImpl < T > > (); + } + + + /** + * get(Long timestamp). + * fonction d'accès au contenu d'une cellule en fonction de son timestamp. + * @param key clé de la ligne. + * @param timestamp désiré. + * @return retourne le contenu de la cellule. + */ + public final T get(final String key, final Long timestamp) { + return this.column.get(key).get(timestamp); + } + + /** + * {@inheritDoc} + */ + public final T get(final String key) { + if (this.column.get(key) == null) { + throw new NoSuchElementException(); + } + return this.column.get(key).get(); + } + + /** + * {@inheritDoc} + */ + public final void put(final String key, final T content) { + try { + this.column.get(key).put(content); + } catch (NullPointerException e) { + this.column.put(key, new CellImpl < T > (content)); + } + } +} Added: trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/DataBase.java =================================================================== --- trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/DataBase.java (rev 0) +++ trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/DataBase.java 2010-01-27 12:20:57 UTC (rev 24) @@ -0,0 +1,10 @@ +package org.nuiton.mapstoragemanager.plugins.bighashmap; + +/** + * Interface listant les méthodes nécéssaires sur une base de données. + * @author Dorian Langlais + * + */ +public interface DataBase { + +} Added: trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Row.java =================================================================== --- trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Row.java (rev 0) +++ trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Row.java 2010-01-27 12:20:57 UTC (rev 24) @@ -0,0 +1,15 @@ +package org.nuiton.mapstoragemanager.plugins.bighashmap; + +/** + * Interface lisant les méthodes nécéssaires sur une ligne. + * @author Dorian Langlais + * + */ +public interface Row { + + /** + * Méthode permettant un affichage du contenu de la ligne. + * @return contenu de la ligne sous forme textuel. + */ + String toString(); +} Added: trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/RowImpl.java =================================================================== --- trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/RowImpl.java (rev 0) +++ trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/RowImpl.java 2010-01-27 12:20:57 UTC (rev 24) @@ -0,0 +1,45 @@ +package org.nuiton.mapstoragemanager.plugins.bighashmap; + +import java.util.HashMap; +import java.util.Map; + +/** + * Classe Row. + * Représente une ligne d'une table. + * @author dorian Langlais, amaury Fages, gilles Crieloue, florent Gilet. + * @licence GPL. + */ +public class RowImpl implements Row { + + /** + * Structure de la ligne. + */ + private StructureImpl rowStructure; + /** + * Contenu de la ligne. + */ + private Map < String, Object > rowContent; + + /** + * Constructeur de Row. + * @param struct structure de la ligne. + * @param content contenu de la ligne. + */ + public RowImpl(final StructureImpl struct, + final Map < String, Object > content) { + this.rowStructure = struct; + this.rowContent = new HashMap < String, Object > (); + for (String columnName : struct.getColumnsNames()) { + rowContent.put(columnName, content.get(columnName)); + } + } + + /** + * {@inheritDoc} + */ + public final String toString() { + String ret; + ret = rowContent.values().toString(); + return ret; + } +} Added: trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Structure.java =================================================================== --- trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Structure.java (rev 0) +++ trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Structure.java 2010-01-27 12:20:57 UTC (rev 24) @@ -0,0 +1,35 @@ +package org.nuiton.mapstoragemanager.plugins.bighashmap; + +import java.util.Set; + +/** + * Interface listant les méthodes nécéssaires sur une structure. + * Une Structure est une description d'une Table. + * @author Dorian Langlais + * + */ +public interface Structure { + + /** + * Méthode permettant l'ajout d'une colonne à une structure de table. + * @param columnName nom de la colonne. + * @param columnClass type d'objet contenu dans la colonne. + */ + void addColumn(String columnName, Class < ? > columnClass); + /** + * Méthode permettant de récupérer le nom des colonnes. + * @return retourne le nom de colonnes. + */ + Set < String > getColumnsNames(); + /** + * Méthode permettant de récupérer le type d'objet d'une colonne. + * @param columnName nom de la colonne. + * @return retourne le type d'objet de la colonne columnName. + */ + Class < ? > getColumnClass(String columnName); + /** + * Méthode permettant la suppression d'une colonne à la structure. + * @param columnName nom de la colonne à supprimer. + */ + void removeColumn(String columnName); +} Added: trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/StructureImpl.java =================================================================== --- trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/StructureImpl.java (rev 0) +++ trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/StructureImpl.java 2010-01-27 12:20:57 UTC (rev 24) @@ -0,0 +1,59 @@ +package org.nuiton.mapstoragemanager.plugins.bighashmap; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +/** + * Classe Structure. + * Représente le mapping d'une ligne, les types des colonnes + * @author Dorian Langlais + * + */ +public class StructureImpl implements Structure { + + /** + * Structure de la table. + * Contient le nom de la colonne comme clé, + * et le type de la colonne pour valeur. + */ + private Map < String, Class < ? /**extends Serializable*/ > > struct; + + /** + * Constructeur par défaut. + */ + public StructureImpl() { + this.struct = + new HashMap < String, Class < ? /**extends Serializable*/ > > (); + } + + /** + * {@inheritDoc} + */ + public final void addColumn(final String columnName, + final Class < ? /**extends Serializable*/ > columnClass) { + this.struct.put(columnName, columnClass); + } + + /** + * {@inheritDoc} + */ + public final void removeColumn(final String columnName) { + this.struct.remove(columnName); + } + + /** + * {@inheritDoc} + */ + public final Class < ? /**extends Serializable*/ > getColumnClass( + final String columnName) { + return this.struct.get(columnName); + } + + /** + * {@inheritDoc} + */ + public final Set < String > getColumnsNames() { + return this.struct.keySet(); + } +} Added: trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Table.java =================================================================== --- trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Table.java (rev 0) +++ trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/Table.java 2010-01-27 12:20:57 UTC (rev 24) @@ -0,0 +1,37 @@ +package org.nuiton.mapstoragemanager.plugins.bighashmap; + +/** + * Interface listant les opérations nécéssaires sur une table. + * @author Dorian Langlais + */ +public interface Table { + + /** + * Méthode permettant l'ajout d'une colonne à la table. + * @param columnName nom de la colonne à ajouter. + * @param columnClass type des objets contenu dans la colonne. + * @param <columnClass> méthode générique paramétrer par le type + * columnClass. + */ + < columnClass > void addColumn(final String columnName, + final Class < ? > columnClass); + + /** + * Méthode de suppression de colonne. + * @param columnName nom de la colonne à suprimer. + */ + void removeColumn(final String columnName); + + /** + * Méthode permettant de récupérer le contenu d'une ligne par sa clé. + * @param key clé de la ligne à récupérer. + * @return retourne la ligne ayant pour clé key. + */ + Row getRow(final String key); + + /** + * Méthode permettant la suppression d'une ligne par sa clé. + * @param key clé de la ligne à supprimer. + */ + void removeRow(final String key); +} Added: trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/TableImpl.java =================================================================== --- trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/TableImpl.java (rev 0) +++ trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/TableImpl.java 2010-01-27 12:20:57 UTC (rev 24) @@ -0,0 +1,69 @@ +package org.nuiton.mapstoragemanager.plugins.bighashmap; + +import java.util.HashMap; +import java.util.Map; + +/** + * Classe Table. + * Représente une table bigtable. + * @author dorian Langlais, amaury Fages, gilles Crieloue, florent Gilet. + * @licence GPL. + */ +public class TableImpl implements Table { + + /** + * Table. + * hashMap ayant pour clé le nom des colonnes et pour valeur une colonne. + */ + private Map < String, ColumnImpl < ? > > tableContent; + /** + * Structure de la Table. + */ + private StructureImpl tableStructure; + + /** + * Constructeur par défaut. + */ + public TableImpl() { + this.tableContent = new HashMap < String, ColumnImpl < ? > > (); + this.tableStructure = new StructureImpl(); + } + + /** + * {@inheritDoc} + */ + public final < columnClass /**extends Serializable*/ > void addColumn( + final String columnName, final Class < ? > columnClass) { + ColumnImpl < columnClass > column = new ColumnImpl < columnClass > (); + this.tableContent.put(columnName, column); + this.tableStructure.addColumn(columnName, columnClass); + } + + /** + * {@inheritDoc} + */ + public final void removeColumn(final String columnName) { + this.tableContent.remove(columnName); + this.tableStructure.removeColumn(columnName); + } + + /** + * {@inheritDoc} + */ + public final Row getRow(final String key) { + Map < String, Object > rowContent = + new HashMap < String, Object > (); + for (String columnName : tableStructure.getColumnsNames()) { + rowContent.put(columnName, + tableContent.get(columnName).get(key)); + } + return new RowImpl(tableStructure, rowContent); + } + + /** + * {@inheritDoc} + */ + public void removeRow(final String key) { + // TODO Auto-generated method stub + } +} Added: trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/package-info.java =================================================================== --- trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/package-info.java (rev 0) +++ trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/bighashmap/package-info.java 2010-01-27 12:20:57 UTC (rev 24) @@ -0,0 +1,6 @@ +package org.nuiton.mapstoragemanager.plugins.bighashmap; +/** + * package BigHashMap. + * permet la représentation sous forme de hashMap d'une base de données selon + * la spécification bigTable. + */ \ No newline at end of file Modified: trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/nvBigTable.java =================================================================== --- trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/nvBigTable.java 2010-01-26 22:45:17 UTC (rev 23) +++ trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/nvBigTable.java 2010-01-27 12:20:57 UTC (rev 24) @@ -1,3 +1,4 @@ +package org.nuiton.mapstoragemanager.plugins; import java.util.Map; import java.util.Set; @@ -2,7 +3,2 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - /** Modified: trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/package-info.java =================================================================== --- trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/package-info.java 2010-01-26 22:45:17 UTC (rev 23) +++ trunk/src/main/java/org/nuiton/mapstoragemanager/plugins/package-info.java 2010-01-27 12:20:57 UTC (rev 24) @@ -1,5 +1,5 @@ +package org.nuiton.mapstoragemanager.plugins; /** * The plugins interfaces. */ -package org.nuiton.mapstoragemanager.plugins;