diff --git a/scm-dao-orientdb/src/main/java/sonia/scm/group/orientdb/GroupConverter.java b/scm-dao-orientdb/src/main/java/sonia/scm/group/orientdb/GroupConverter.java new file mode 100644 index 0000000000..56a70a885a --- /dev/null +++ b/scm-dao-orientdb/src/main/java/sonia/scm/group/orientdb/GroupConverter.java @@ -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 +{ + + /** 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 properties = doc.field(FIELD_PROPERTIES); + + group.setProperties(properties); + + List 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(); + } + } +} diff --git a/scm-dao-orientdb/src/main/java/sonia/scm/group/orientdb/OrientDBGroupDAO.java b/scm-dao-orientdb/src/main/java/sonia/scm/group/orientdb/OrientDBGroupDAO.java index 2870f68481..f848d9188d 100644 --- a/scm-dao-orientdb/src/main/java/sonia/scm/group/orientdb/OrientDBGroupDAO.java +++ b/scm-dao-orientdb/src/main/java/sonia/scm/group/orientdb/OrientDBGroupDAO.java @@ -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 + 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 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 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 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); + } } }