WIP: left over open files for long...
This commit is contained in:
parent
0a2398c5c1
commit
76aa74990e
165 changed files with 4299 additions and 3373 deletions
|
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
* Copyright 2007-2012 forwardfire.net All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
|
||||
* the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package net.forwardfire.vasc.backend.mongodb;
|
||||
|
||||
import org.bson.types.ObjectId;
|
||||
|
||||
import net.forwardfire.vasc.backend.AbstractVascBackendLocal;
|
||||
import net.forwardfire.vasc.backend.VascBackendAccessDataKey;
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
|
||||
import com.mongodb.BasicDBObject;
|
||||
import com.mongodb.DB;
|
||||
import com.mongodb.DBCollection;
|
||||
|
||||
/**
|
||||
* AbstractMongodbVascBackend
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 Oct 26, 2014
|
||||
*/
|
||||
abstract public class AbstractMongodbVascBackend extends AbstractVascBackendLocal<ObjectId> {
|
||||
|
||||
public static final String PK_FIELD_NAME = "_id";
|
||||
private MongodbConnectionProvider connectionProvider = null;
|
||||
private String collection = null;
|
||||
private DB database = null;
|
||||
|
||||
@Override
|
||||
public final void startBackendLocal() {
|
||||
requireNonNull(connectionProvider, "Can't start with null connectionProvider.");
|
||||
requireNonEmpty(collection, "Can't start without collection.");
|
||||
database = connectionProvider.getMongodbConnection();
|
||||
requireNonNull(database, "connectionProvider provided us a null database.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void stopBackendLocal() {
|
||||
database = null;
|
||||
}
|
||||
|
||||
protected final DBCollection getDBCollection() {
|
||||
return database.getCollection(collection);
|
||||
}
|
||||
|
||||
protected final void deleteById(ObjectId objectId) throws VascBackendException {
|
||||
getDBCollection().remove(new BasicDBObject(PK_FIELD_NAME,objectId)); // remove by _id
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#createVascBackendAccessDataKey()
|
||||
*/
|
||||
@Override
|
||||
public final VascBackendAccessDataKey<ObjectId> createVascBackendAccessDataKey() {
|
||||
return new MongodbVascBackendAccessDataKey();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the connectionProvider
|
||||
*/
|
||||
public final MongodbConnectionProvider getConnectionProvider() {
|
||||
return connectionProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param connectionProvider the connectionProvider to set
|
||||
*/
|
||||
public final void setConnectionProvider(MongodbConnectionProvider connectionProvider) {
|
||||
this.connectionProvider = connectionProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the collection
|
||||
*/
|
||||
public final String getCollection() {
|
||||
return collection;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param collection the collection to set
|
||||
*/
|
||||
public final void setCollection(String collection) {
|
||||
this.collection = collection;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,191 +0,0 @@
|
|||
/*
|
||||
* Copyright 2007-2012 forwardfire.net All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
|
||||
* the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package net.forwardfire.vasc.backend.mongodb;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import net.forwardfire.vasc.backend.AbstractVascBackend;
|
||||
import net.forwardfire.vasc.backend.DefaultVascBackendResult;
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
import net.forwardfire.vasc.backend.VascBackendResult;
|
||||
import net.forwardfire.vasc.backend.VascBackendState;
|
||||
import net.forwardfire.vasc.backend.VascEntryRecordCreator;
|
||||
|
||||
import com.mongodb.DB;
|
||||
import com.mongodb.DBCollection;
|
||||
import com.mongodb.DBCursor;
|
||||
import com.mongodb.DBObject;
|
||||
import com.mongodb.BasicDBObject;
|
||||
import com.mongodb.WriteConcern;
|
||||
import com.mongodb.WriteResult;
|
||||
|
||||
/**
|
||||
* MongodbVascBackend Provides backend for mongodb.
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 Dec 30, 2011
|
||||
*/
|
||||
public class MongodbVascBackend extends AbstractVascBackend<BasicDBObject> {
|
||||
|
||||
private Logger logger = null;
|
||||
private MongodbConnectionProvider connectionProvider = null;
|
||||
private String collection = null;
|
||||
private DB database = null;
|
||||
|
||||
public MongodbVascBackend() {
|
||||
logger = Logger.getLogger(MongodbVascBackend.class.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.AbstractVascBackend#startBackend()
|
||||
*/
|
||||
@Override
|
||||
public void startBackend() {
|
||||
if (connectionProvider==null) {
|
||||
throw new NullPointerException("Can't start backend with null connectionProvider.");
|
||||
}
|
||||
database = connectionProvider.getMongodbConnection();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.AbstractVascBackend#stopBackend()
|
||||
*/
|
||||
@Override
|
||||
public void stopBackend() {
|
||||
database = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.AbstractVascBackend#isPageable()
|
||||
*/
|
||||
@Override
|
||||
public boolean isPageable() {
|
||||
return true;
|
||||
}
|
||||
|
||||
private long fetchTotalExecuteSize(VascBackendState state) {
|
||||
DBCollection coll = getDBCollection();
|
||||
DBObject query = createFilterQuery(state);
|
||||
long result = coll.count(query);
|
||||
return result;
|
||||
}
|
||||
|
||||
private DBObject createFilterQuery(VascBackendState state) {
|
||||
DBObject query = new BasicDBObject();
|
||||
for (String key:state.getDataParameterKeys()) {
|
||||
Object value = state.getDataParameter(key);
|
||||
query.put(key, value);
|
||||
logger.finer("Setting query parameter key: '"+key+"' value: '"+value+"'");
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VascBackendResult<BasicDBObject> execute(VascBackendState state) throws VascBackendException {
|
||||
return new DefaultVascBackendResult<BasicDBObject>(executeList(state),fetchTotalExecuteSize(state));
|
||||
}
|
||||
|
||||
private List<BasicDBObject> executeList(VascBackendState state) throws VascBackendException {
|
||||
DBCollection coll = getDBCollection();
|
||||
DBObject query = createFilterQuery(state);
|
||||
DBCursor cur = coll.find(query);
|
||||
if (isPageable() && state.getPageSize()>0) {
|
||||
cur.limit(state.getPageSize());
|
||||
cur.skip(state.getPageIndex());
|
||||
}
|
||||
List<BasicDBObject> result = new ArrayList<BasicDBObject>(cur.count());
|
||||
while (cur.hasNext()) {
|
||||
DBObject row = cur.next();
|
||||
result.add((BasicDBObject)row);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void persist(BasicDBObject object) throws VascBackendException {
|
||||
DBCollection coll = getDBCollection();
|
||||
coll.insert(object);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BasicDBObject merge(BasicDBObject row) throws VascBackendException {
|
||||
DBCollection coll = getDBCollection();
|
||||
DBObject query = new BasicDBObject();
|
||||
query.put("_id",row.get("_id"));
|
||||
WriteResult wr = coll.update(query,row,false,false,WriteConcern.SAFE);
|
||||
logger.info("WriteResult: "+wr);
|
||||
return row;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(BasicDBObject object) throws VascBackendException {
|
||||
DBCollection coll = getDBCollection();
|
||||
DBObject query = new BasicDBObject();
|
||||
query.put("_id",object.get("_id"));
|
||||
coll.remove(query); // remove by _id
|
||||
}
|
||||
|
||||
@Override
|
||||
public MongodbVascEntryFieldValue provideVascEntryFieldValue() {
|
||||
return new MongodbVascEntryFieldValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public VascEntryRecordCreator<BasicDBObject> provideVascEntryRecordCreator() {
|
||||
return new MongodbVascEntryRecordCreator();
|
||||
}
|
||||
|
||||
private DBCollection getDBCollection() {
|
||||
return database.getCollection(collection);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the connectionProvider
|
||||
*/
|
||||
public MongodbConnectionProvider getConnectionProvider() {
|
||||
return connectionProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param connectionProvider the connectionProvider to set
|
||||
*/
|
||||
public void setConnectionProvider(MongodbConnectionProvider connectionProvider) {
|
||||
this.connectionProvider = connectionProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the collection
|
||||
*/
|
||||
public String getCollection() {
|
||||
return collection;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param collection the collection to set
|
||||
*/
|
||||
public void setCollection(String collection) {
|
||||
this.collection = collection;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
* Copyright 2007-2012 forwardfire.net All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
|
||||
* the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package net.forwardfire.vasc.backend.mongodb;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bson.types.ObjectId;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackendAccessDataKey;
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
|
||||
/**
|
||||
* MongodbVascBackendAccessDataKey convert key type to string and back.
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 Oct 26, 2014
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public class MongodbVascBackendAccessDataKey implements VascBackendAccessDataKey<ObjectId> {
|
||||
|
||||
private final Map<String,Class<?>> keyMapType;
|
||||
|
||||
public MongodbVascBackendAccessDataKey() {
|
||||
keyMapType = new HashMap<String,Class<?>>(1);
|
||||
keyMapType.put(AbstractMongodbVascBackend.PK_FIELD_NAME, ObjectId.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Class<?>> getKeyMapType() {
|
||||
return keyMapType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Serializable> getKeyMapFromPrimaryKey(ObjectId primaryKey) throws VascBackendException {
|
||||
Map<String, Serializable> result = new HashMap<String,Serializable>(1);
|
||||
result.put(MongodbVascBackendCrud.PK_FIELD_NAME, primaryKey);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectId getPrimaryKeyFromKeyMap(Map<String, Serializable> keyMap) throws VascBackendException {
|
||||
return (ObjectId)keyMap.get(MongodbVascBackendCrud.PK_FIELD_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> getStringMapFromPrimaryKey(ObjectId primaryKey) throws VascBackendException {
|
||||
Map<String, String> result = new HashMap<String,String>(1);
|
||||
result.put(MongodbVascBackendCrud.PK_FIELD_NAME, primaryKey.toString());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectId getPrimaryKeyFromStringMap(Map<String, String> keyMap) throws VascBackendException {
|
||||
return new ObjectId(keyMap.get(MongodbVascBackendCrud.PK_FIELD_NAME));
|
||||
}
|
||||
}
|
||||
|
|
@ -24,8 +24,10 @@ package net.forwardfire.vasc.backend.mongodb;
|
|||
|
||||
import java.io.Serializable;
|
||||
|
||||
import org.bson.types.ObjectId;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
import net.forwardfire.vasc.backend.VascEntryFieldValue;
|
||||
import net.forwardfire.vasc.backend.VascBackendAccessDataRecord;
|
||||
|
||||
import com.mongodb.BasicDBObject;
|
||||
|
||||
|
|
@ -35,23 +37,30 @@ import com.mongodb.BasicDBObject;
|
|||
* @author Willem Cazander
|
||||
* @version 1.0 Dec 30, 2011
|
||||
*/
|
||||
public class MongodbVascEntryFieldValue implements VascEntryFieldValue<BasicDBObject> {
|
||||
|
||||
private static final long serialVersionUID = -7371273796529818557L;
|
||||
@SuppressWarnings("serial")
|
||||
public class MongodbVascBackendAccessDataRecord implements VascBackendAccessDataRecord<ObjectId,BasicDBObject> {
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackendAccessDataRecord#getPrimaryKey(java.io.Serializable)
|
||||
*/
|
||||
@Override
|
||||
public Serializable getValue(String backendName, BasicDBObject row) throws VascBackendException {
|
||||
Serializable data = (Serializable) row.get(backendName);
|
||||
return data;
|
||||
public ObjectId getPrimaryKey(BasicDBObject record) throws VascBackendException {
|
||||
return record.getObjectId(AbstractMongodbVascBackend.PK_FIELD_NAME);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackendAccessDataRecord#getValue(java.lang.String, java.io.Serializable)
|
||||
*/
|
||||
@Override
|
||||
public String getDisplayValue(String field, BasicDBObject row) throws VascBackendException {
|
||||
return ""+getValue(field,row);
|
||||
public Serializable getValue(String backendName, BasicDBObject record) throws VascBackendException {
|
||||
return (Serializable) record.get(backendName);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackendAccessDataRecord#setValue(java.lang.String, java.io.Serializable, java.io.Serializable)
|
||||
*/
|
||||
@Override
|
||||
public void setValue(String backendName, BasicDBObject row, Serializable value) throws VascBackendException {
|
||||
row.put(backendName, value);
|
||||
public void setValue(String backendName, BasicDBObject record,Serializable value) throws VascBackendException {
|
||||
record.put(backendName, value);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
/*
|
||||
* Copyright 2007-2012 forwardfire.net All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
|
||||
* the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package net.forwardfire.vasc.backend.mongodb;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.bson.types.ObjectId;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackendAccessDataRecord;
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
import net.forwardfire.vasc.backend.crud.VascBackendCrud;
|
||||
|
||||
import com.mongodb.DBCollection;
|
||||
import com.mongodb.DBObject;
|
||||
import com.mongodb.BasicDBObject;
|
||||
import com.mongodb.WriteConcern;
|
||||
import com.mongodb.WriteResult;
|
||||
|
||||
/**
|
||||
* MongodbVascBackend Provides backend for mongodb.
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 Dec 30, 2011
|
||||
*/
|
||||
public class MongodbVascBackendCrud extends AbstractMongodbVascBackend implements VascBackendCrud<ObjectId,BasicDBObject> {
|
||||
|
||||
private Logger logger = null;
|
||||
|
||||
public MongodbVascBackendCrud() {
|
||||
logger = Logger.getLogger(MongodbVascBackendCrud.class.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public BasicDBObject newRecord() throws VascBackendException {
|
||||
return new BasicDBObject();
|
||||
}
|
||||
|
||||
@Override
|
||||
public BasicDBObject fetch(ObjectId recordPK) throws VascBackendException {
|
||||
return (BasicDBObject)getDBCollection().findOne(new BasicDBObject(PK_FIELD_NAME,recordPK));
|
||||
}
|
||||
|
||||
@Override
|
||||
public BasicDBObject persist(BasicDBObject object) throws VascBackendException {
|
||||
getDBCollection().insert(object);
|
||||
return fetch(object.getObjectId(AbstractMongodbVascBackend.PK_FIELD_NAME));
|
||||
}
|
||||
|
||||
@Override
|
||||
public BasicDBObject merge(BasicDBObject row) throws VascBackendException {
|
||||
DBCollection coll = getDBCollection();
|
||||
DBObject query = new BasicDBObject();
|
||||
query.put(AbstractMongodbVascBackend.PK_FIELD_NAME,row.getObjectId(AbstractMongodbVascBackend.PK_FIELD_NAME));
|
||||
WriteResult wr = coll.update(query,row,false,false,WriteConcern.SAFE);
|
||||
logger.finer("WriteResult: "+wr);
|
||||
return fetch(row.getObjectId(AbstractMongodbVascBackend.PK_FIELD_NAME));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(ObjectId objectId) throws VascBackendException {
|
||||
deleteById(objectId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#createVascBackendAccessDataRecord()
|
||||
*/
|
||||
@Override
|
||||
public VascBackendAccessDataRecord<ObjectId, BasicDBObject> createVascBackendAccessDataRecord() {
|
||||
return new MongodbVascBackendAccessDataRecord();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,127 @@
|
|||
/*
|
||||
* Copyright 2007-2012 forwardfire.net All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
|
||||
* the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package net.forwardfire.vasc.backend.mongodb;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.bson.types.ObjectId;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackendAccessDataRecord;
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
import net.forwardfire.vasc.backend.list.DefaultVascBackendListResult;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendList;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListFeature;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListResult;
|
||||
import net.forwardfire.vasc.backend.list.VascBackendListRequest;
|
||||
|
||||
import com.mongodb.DBCollection;
|
||||
import com.mongodb.DBCursor;
|
||||
import com.mongodb.DBObject;
|
||||
import com.mongodb.BasicDBObject;
|
||||
|
||||
/**
|
||||
* MongodbVascBackendList Provides backend for mongodb.
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 Dec 30, 2011
|
||||
*/
|
||||
public class MongodbVascBackendList extends AbstractMongodbVascBackend implements VascBackendList<ObjectId,BasicDBObject> {
|
||||
|
||||
private Logger logger = null;
|
||||
private final EnumSet<VascBackendListFeature> features = EnumSet.noneOf(VascBackendListFeature.class);
|
||||
private final List<String> rowActions = new ArrayList<String>();
|
||||
|
||||
public MongodbVascBackendList() {
|
||||
logger = Logger.getLogger(MongodbVascBackendList.class.getName());
|
||||
features.add(VascBackendListFeature.PAGE_DATA);
|
||||
rowActions.add(ROW_ACTION_DELETE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumSet<VascBackendListFeature> getSupportedFeatures() {
|
||||
return features;
|
||||
}
|
||||
|
||||
private long fetchTotalExecuteSize(VascBackendListRequest state) {
|
||||
DBCollection coll = getDBCollection();
|
||||
DBObject query = createFilterQuery(state);
|
||||
long result = coll.count(query);
|
||||
return result;
|
||||
}
|
||||
|
||||
private DBObject createFilterQuery(VascBackendListRequest state) {
|
||||
DBObject query = new BasicDBObject();
|
||||
for (String key:state.getDataParameterKeys()) {
|
||||
Object value = state.getDataParameter(key);
|
||||
query.put(key, value);
|
||||
logger.finer("Setting query parameter key: '"+key+"' value: '"+value+"'");
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VascBackendListResult<BasicDBObject> execute(VascBackendListRequest state) throws VascBackendException {
|
||||
return new DefaultVascBackendListResult<BasicDBObject>(executeList(state),fetchTotalExecuteSize(state));
|
||||
}
|
||||
|
||||
private List<BasicDBObject> executeList(VascBackendListRequest state) throws VascBackendException {
|
||||
DBCollection coll = getDBCollection();
|
||||
DBObject query = createFilterQuery(state);
|
||||
DBCursor cur = coll.find(query);
|
||||
if (state.getPageSize()>0) {
|
||||
cur.limit(state.getPageSize());
|
||||
cur.skip(state.getPageIndex());
|
||||
}
|
||||
List<BasicDBObject> result = new ArrayList<BasicDBObject>(cur.count());
|
||||
while (cur.hasNext()) {
|
||||
DBObject row = cur.next();
|
||||
result.add((BasicDBObject)row);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#createVascBackendAccessDataRecord()
|
||||
*/
|
||||
@Override
|
||||
public VascBackendAccessDataRecord<ObjectId, BasicDBObject> createVascBackendAccessDataRecord() {
|
||||
return new MongodbVascBackendAccessDataRecord();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getSupportedRowActions() {
|
||||
return rowActions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void executeRowAction(VascBackendListRequest request,List<ObjectId> recordPKs, String actionName) throws VascBackendException {
|
||||
if (ROW_ACTION_DELETE.equals(actionName)) {
|
||||
for (ObjectId objectId:recordPKs) {
|
||||
deleteById(objectId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -20,26 +20,51 @@
|
|||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
package net.forwardfire.vasc.backend.mongodb;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
import net.forwardfire.vasc.backend.VascEntryRecordCreator;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bson.types.ObjectId;
|
||||
|
||||
import net.forwardfire.vasc.backend.VascBackendException;
|
||||
import net.forwardfire.vasc.backend.select.DefaultVascBackendSelectItem;
|
||||
import net.forwardfire.vasc.backend.select.VascBackendSelect;
|
||||
import net.forwardfire.vasc.backend.select.VascBackendSelectItem;
|
||||
|
||||
import com.mongodb.DBCollection;
|
||||
import com.mongodb.DBCursor;
|
||||
import com.mongodb.DBObject;
|
||||
import com.mongodb.BasicDBObject;
|
||||
|
||||
/**
|
||||
* Provides a mongodb object to create a new row.
|
||||
* MongodbVascBackendSelect Provides backend for mongodb.
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 Dec 30, 2011
|
||||
*/
|
||||
public class MongodbVascEntryRecordCreator implements VascEntryRecordCreator<BasicDBObject> {
|
||||
public class MongodbVascBackendSelect extends AbstractMongodbVascBackend implements VascBackendSelect<ObjectId> {
|
||||
|
||||
private static final long serialVersionUID = -9213830731796787384L;
|
||||
|
||||
@Override
|
||||
public BasicDBObject newRecord() throws VascBackendException {
|
||||
return new BasicDBObject();
|
||||
public List<VascBackendSelectItem<ObjectId>> execute() throws VascBackendException {
|
||||
DBCollection coll = getDBCollection();
|
||||
DBObject query = new BasicDBObject();
|
||||
DBCursor cur = coll.find(query);
|
||||
List<VascBackendSelectItem<ObjectId>> result = new ArrayList<VascBackendSelectItem<ObjectId>>(cur.count());
|
||||
while (cur.hasNext()) {
|
||||
BasicDBObject row = (BasicDBObject)cur.next();
|
||||
|
||||
boolean header = false;
|
||||
boolean enabled = true;
|
||||
String name = row.getString("toto");
|
||||
boolean nameI18nKey = false;
|
||||
String description = row.getString("sdf");
|
||||
boolean descriptionI18nKey = false;
|
||||
ObjectId primaryKey = row.getObjectId(PK_FIELD_NAME);
|
||||
|
||||
result.add(new DefaultVascBackendSelectItem<ObjectId>(header,enabled,name,nameI18nKey,description,descriptionI18nKey,primaryKey));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue