implement group converter and dao for orientdb

This commit is contained in:
Sebastian Sdorra
2012-03-18 15:16:15 +01:00
parent 30074acf35
commit 1c79af8361
2 changed files with 232 additions and 100 deletions

View File

@@ -0,0 +1,178 @@
/**
* Copyright (c) 2010, Sebastian Sdorra All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. 2. 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. 3. Neither the name of SCM-Manager;
* nor the names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* 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 REGENTS 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.
*
* http://bitbucket.org/sdorra/scm-manager
*
*/
package sonia.scm.group.orientdb;
//~--- non-JDK imports --------------------------------------------------------
import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.metadata.schema.OClass.INDEX_TYPE;
import com.orientechnologies.orient.core.metadata.schema.OSchema;
import com.orientechnologies.orient.core.metadata.schema.OType;
import com.orientechnologies.orient.core.record.impl.ODocument;
import sonia.scm.group.Group;
import sonia.scm.orientdb.AbstractConverter;
import sonia.scm.orientdb.Converter;
//~--- JDK imports ------------------------------------------------------------
import java.util.List;
import java.util.Map;
/**
*
* @author Sebastian Sdorra
*/
public class GroupConverter extends AbstractConverter
implements Converter<Group>
{
/** Field description */
public static final String DOCUMENT_CLASS = "Group";
/** Field description */
public static final String FIELD_CREATIONDATE = "creationDate";
/** Field description */
public static final String FIELD_DESCRIPTION = "description";
/** Field description */
public static final String FIELD_MEMBERS = "members";
/** Field description */
public static final String INDEX_ID = "groupId";
/** Field description */
public static final GroupConverter INSTANCE = new GroupConverter();
//~--- methods --------------------------------------------------------------
/**
* Method description
*
*
* @param group
*
* @return
*/
@Override
public ODocument convert(Group group)
{
ODocument doc = new ODocument(DOCUMENT_CLASS);
return convert(doc, group);
}
/**
* Method description
*
*
* @param doc
* @param group
*
* @return
*/
@Override
public ODocument convert(ODocument doc, Group group)
{
appendModelObjectFields(doc, group);
appendField(doc, FIELD_DESCRIPTION, group.getDescription());
appendField(doc, FIELD_CREATIONDATE, group.getCreationDate(), OType.LONG);
appendField(doc, FIELD_MEMBERS, group.getMembers(), OType.EMBEDDEDLIST);
appendPropertiesField(doc, group);
return doc;
}
/**
* Method description
*
*
* @param doc
*
* @return
*/
@Override
public Group convert(ODocument doc)
{
Group group = new Group();
group.setName(getStringField(doc, FIELD_ID));
group.setDescription(getStringField(doc, FIELD_DESCRIPTION));
group.setType(getStringField(doc, FIELD_TYPE));
group.setCreationDate(getLongField(doc, FIELD_CREATIONDATE));
group.setLastModified(getLongField(doc, FIELD_LASTMODIFIED));
Map<String, String> properties = doc.field(FIELD_PROPERTIES);
group.setProperties(properties);
List<String> members = doc.field(FIELD_MEMBERS);
group.setMembers(members);
return group;
}
/**
* Method description
*
*
* @param connection
*/
void createShema(ODatabaseDocumentTx connection)
{
OSchema schema = connection.getMetadata().getSchema();
OClass oclass = schema.getClass(DOCUMENT_CLASS);
if (oclass == null)
{
oclass = schema.createClass(DOCUMENT_CLASS);
// model properites
oclass.createProperty(FIELD_ID, OType.STRING);
oclass.createProperty(FIELD_TYPE, OType.STRING);
oclass.createProperty(FIELD_LASTMODIFIED, OType.LONG);
// user properties
oclass.createProperty(FIELD_DESCRIPTION, OType.STRING);
oclass.createProperty(FIELD_CREATIONDATE, OType.LONG);
oclass.createProperty(FIELD_MEMBERS, OType.EMBEDDEDLIST);
oclass.createProperty(FIELD_PROPERTIES, OType.EMBEDDEDMAP);
// indexes
oclass.createIndex(INDEX_ID, INDEX_TYPE.UNIQUE, FIELD_ID);
schema.save();
}
}
}

View File

@@ -33,82 +33,48 @@ package sonia.scm.group.orientdb;
//~--- non-JDK imports --------------------------------------------------------
import com.google.inject.Provider;
import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
import com.orientechnologies.orient.core.record.impl.ODocument;
import sonia.scm.group.Group;
import sonia.scm.group.GroupDAO;
import sonia.scm.orientdb.AbstractOrientDBModelDAO;
import sonia.scm.orientdb.OrientDBUtil;
import sonia.scm.user.orientdb.UserConverter;
//~--- JDK imports ------------------------------------------------------------
import java.util.Collection;
import java.util.List;
/**
*
* @author Sebastian Sdorra
*/
public class OrientDBGroupDAO implements GroupDAO
public class OrientDBGroupDAO extends AbstractOrientDBModelDAO<Group>
implements GroupDAO
{
/**
* Method description
*
*
* @param item
*/
@Override
public void add(Group item)
{
throw new UnsupportedOperationException("Not supported yet.");
}
/** Field description */
public static final String QUERY_ALL = "select from Repository";
/** Field description */
public static final String QUERY_SINGLE_BYID =
"select from Repository where id = ?";
//~--- constructors ---------------------------------------------------------
/**
* Method description
* Constructs ...
*
*
* @param item
*
* @return
* @param connectionProvider
*/
@Override
public boolean contains(Group item)
public OrientDBGroupDAO(Provider<ODatabaseDocumentTx> connectionProvider)
{
throw new UnsupportedOperationException("Not supported yet.");
}
/**
* Method description
*
*
* @param id
*
* @return
*/
@Override
public boolean contains(String id)
{
throw new UnsupportedOperationException("Not supported yet.");
}
/**
* Method description
*
*
* @param item
*/
@Override
public void delete(Group item)
{
throw new UnsupportedOperationException("Not supported yet.");
}
/**
* Method description
*
*
* @param item
*/
@Override
public void modify(Group item)
{
throw new UnsupportedOperationException("Not supported yet.");
super(connectionProvider, GroupConverter.INSTANCE);
init();
}
//~--- get methods ----------------------------------------------------------
@@ -117,61 +83,49 @@ public class OrientDBGroupDAO implements GroupDAO
* Method description
*
*
* @param connection
*
* @return
*/
@Override
protected List<ODocument> getAllDocuments(ODatabaseDocumentTx connection)
{
return OrientDBUtil.executeListResultQuery(connection, QUERY_ALL);
}
/**
* Method description
*
*
* @param connection
* @param id
*
* @return
*/
@Override
public Group get(String id)
protected ODocument getDocument(ODatabaseDocumentTx connection, String id)
{
throw new UnsupportedOperationException("Not supported yet.");
return OrientDBUtil.executeSingleResultQuery(connection, QUERY_SINGLE_BYID,
id);
}
//~--- methods --------------------------------------------------------------
/**
* Method description
*
*
* @return
*/
@Override
public Collection<Group> getAll()
private void init()
{
throw new UnsupportedOperationException("Not supported yet.");
}
ODatabaseDocumentTx connection = connectionProvider.get();
/**
* Method description
*
*
* @return
*/
@Override
public Long getCreationTime()
{
throw new UnsupportedOperationException("Not supported yet.");
}
/**
* Method description
*
*
* @return
*/
@Override
public Long getLastModified()
{
throw new UnsupportedOperationException("Not supported yet.");
}
/**
* Method description
*
*
* @return
*/
@Override
public String getType()
{
throw new UnsupportedOperationException("Not supported yet.");
try
{
UserConverter.INSTANCE.createShema(connection);
}
finally
{
OrientDBUtil.close(connection);
}
}
}