From: <dme...@us...> - 2014-05-21 09:56:40
|
Revision: 8390 http://sourceforge.net/p/bigdata/code/8390 Author: dmekonnen Date: 2014-05-21 09:56:34 +0000 (Wed, 21 May 2014) Log Message: ----------- last commit failed, retrying. Added Paths: ----------- branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/LEGAL/apache-commons.txt branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/LEGAL/jettison-license.txt branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/LEGAL/rexster-license.txt branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/blueprints-core-2.5.0.jar branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/blueprints-test-2.5.0.jar branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/commons-configuration-1.10.jar branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/jettison-1.3.3.jar branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/rexster-core-2.5.0.jar branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataGraph.java branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataGraphBulkLoad.java branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataGraphClient.java branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataGraphConfiguration.java branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataGraphEmbedded.java branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataGraphFactory.java branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataGraphQuery.java branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataPredicate.java branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataRDFFactory.java branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BlueprintsRDFFactory.java branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/resources/ branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/resources/rexster.xml branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/test/ branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/test/com/ branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/test/com/bigdata/ branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/test/com/bigdata/blueprints/ branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/test/com/bigdata/blueprints/AbstractTestBigdataGraph.java branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/test/com/bigdata/blueprints/TestAll.java branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/test/com/bigdata/blueprints/TestBigdataGraphClient.java branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/test/com/bigdata/blueprints/TestBigdataGraphEmbedded.java branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/test/com/bigdata/blueprints/graph-example-1.xml Added: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/LEGAL/apache-commons.txt =================================================================== --- branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/LEGAL/apache-commons.txt (rev 0) +++ branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/LEGAL/apache-commons.txt 2014-05-21 09:56:34 UTC (rev 8390) @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed 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. Added: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/LEGAL/jettison-license.txt =================================================================== --- branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/LEGAL/jettison-license.txt (rev 0) +++ branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/LEGAL/jettison-license.txt 2014-05-21 09:56:34 UTC (rev 8390) @@ -0,0 +1,13 @@ +Copyright 2006 Envoi Solutions LLC + +Licensed 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. \ No newline at end of file Added: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/LEGAL/rexster-license.txt =================================================================== --- branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/LEGAL/rexster-license.txt (rev 0) +++ branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/LEGAL/rexster-license.txt 2014-05-21 09:56:34 UTC (rev 8390) @@ -0,0 +1,24 @@ +Copyright (c) 2009-Infinity, TinkerPop [http://tinkerpop.com] +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. + * Neither the name of the TinkerPop 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 TINKERPOP 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. \ No newline at end of file Added: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/blueprints-core-2.5.0.jar =================================================================== (Binary files differ) Index: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/blueprints-core-2.5.0.jar =================================================================== --- branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/blueprints-core-2.5.0.jar 2014-05-21 09:12:36 UTC (rev 8389) +++ branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/blueprints-core-2.5.0.jar 2014-05-21 09:56:34 UTC (rev 8390) Property changes on: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/blueprints-core-2.5.0.jar ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/blueprints-test-2.5.0.jar =================================================================== (Binary files differ) Index: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/blueprints-test-2.5.0.jar =================================================================== --- branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/blueprints-test-2.5.0.jar 2014-05-21 09:12:36 UTC (rev 8389) +++ branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/blueprints-test-2.5.0.jar 2014-05-21 09:56:34 UTC (rev 8390) Property changes on: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/blueprints-test-2.5.0.jar ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/commons-configuration-1.10.jar =================================================================== (Binary files differ) Index: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/commons-configuration-1.10.jar =================================================================== --- branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/commons-configuration-1.10.jar 2014-05-21 09:12:36 UTC (rev 8389) +++ branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/commons-configuration-1.10.jar 2014-05-21 09:56:34 UTC (rev 8390) Property changes on: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/commons-configuration-1.10.jar ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/jettison-1.3.3.jar =================================================================== (Binary files differ) Index: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/jettison-1.3.3.jar =================================================================== --- branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/jettison-1.3.3.jar 2014-05-21 09:12:36 UTC (rev 8389) +++ branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/jettison-1.3.3.jar 2014-05-21 09:56:34 UTC (rev 8390) Property changes on: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/jettison-1.3.3.jar ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/rexster-core-2.5.0.jar =================================================================== (Binary files differ) Index: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/rexster-core-2.5.0.jar =================================================================== --- branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/rexster-core-2.5.0.jar 2014-05-21 09:12:36 UTC (rev 8389) +++ branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/rexster-core-2.5.0.jar 2014-05-21 09:56:34 UTC (rev 8390) Property changes on: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/lib/rexster-core-2.5.0.jar ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataGraph.java =================================================================== --- branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataGraph.java (rev 0) +++ branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataGraph.java 2014-05-21 09:56:34 UTC (rev 8390) @@ -0,0 +1,1050 @@ +/** +Copyright (C) SYSTAP, LLC 2006-2014. All rights reserved. + +Contact: + SYSTAP, LLC + 4501 Tower Road + Greensboro, NC 27410 + lic...@bi... + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package com.bigdata.blueprints; + +import info.aduna.iteration.CloseableIteration; + +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +import org.openrdf.OpenRDFException; +import org.openrdf.model.Literal; +import org.openrdf.model.Statement; +import org.openrdf.model.URI; +import org.openrdf.model.Value; +import org.openrdf.model.impl.StatementImpl; +import org.openrdf.model.impl.URIImpl; +import org.openrdf.model.vocabulary.RDF; +import org.openrdf.model.vocabulary.RDFS; +import org.openrdf.query.GraphQueryResult; +import org.openrdf.query.QueryLanguage; +import org.openrdf.repository.RepositoryConnection; +import org.openrdf.repository.RepositoryResult; + +import com.bigdata.rdf.store.BD; +import com.tinkerpop.blueprints.Direction; +import com.tinkerpop.blueprints.Edge; +import com.tinkerpop.blueprints.Features; +import com.tinkerpop.blueprints.Graph; +import com.tinkerpop.blueprints.GraphQuery; +import com.tinkerpop.blueprints.Vertex; +import com.tinkerpop.blueprints.util.io.graphml.GraphMLReader; + +/** + * A base class for a Blueprints wrapper around a bigdata back-end. + * + * @author mikepersonick + * + */ +public abstract class BigdataGraph implements Graph { + + /** + * URI used to represent a Vertex. + */ + public static final URI VERTEX = new URIImpl(BD.NAMESPACE + "Vertex"); + + /** + * URI used to represent a Edge. + */ + public static final URI EDGE = new URIImpl(BD.NAMESPACE + "Edge"); + + /** + * Factory for round-tripping between Blueprints data and RDF data. + */ + final BlueprintsRDFFactory factory; + + public BigdataGraph(final BlueprintsRDFFactory factory) { + + this.factory = factory; + + } + + /** + * For some reason this is part of the specification (i.e. part of the + * Blueprints test suite). + */ + public String toString() { + + return getClass().getSimpleName().toLowerCase(); + + } + + /** + * Different implementations will return different types of connections + * depending on the mode (client/server, embedded, read-only, etc.) + */ + protected abstract RepositoryConnection cxn() throws Exception; + + /** + * Return a single-valued property for an edge or vertex. + * + * @see {@link BigdataElement} + */ + public Object getProperty(final URI uri, final String prop) { + + return getProperty(uri, factory.toPropertyURI(prop)); + + } + + /** + * Return a single-valued property for an edge or vertex. + * + * @see {@link BigdataElement} + */ + public Object getProperty(final URI uri, final URI prop) { + + try { + + final RepositoryResult<Statement> result = + cxn().getStatements(uri, prop, null, false); + + if (result.hasNext()) { + + final Value value = result.next().getObject(); + + if (result.hasNext()) { + throw new RuntimeException(uri + + ": more than one value for p: " + prop + + ", did you mean to call getProperties()?"); + } + + if (!(value instanceof Literal)) { + throw new RuntimeException("not a property: " + value); + } + + final Literal lit = (Literal) value; + + return factory.fromLiteral(lit); + + } + + return null; + + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Return a multi-valued property for an edge or vertex. + * + * @see {@link BigdataElement} + */ + public List<Object> getProperties(final URI uri, final String prop) { + + return getProperties(uri, factory.toPropertyURI(prop)); + + } + + + /** + * Return a multi-valued property for an edge or vertex. + * + * @see {@link BigdataElement} + */ + public List<Object> getProperties(final URI uri, final URI prop) { + + try { + + final RepositoryResult<Statement> result = + cxn().getStatements(uri, prop, null, false); + + final List<Object> props = new LinkedList<Object>(); + + while (result.hasNext()) { + + final Value value = result.next().getObject(); + + if (!(value instanceof Literal)) { + throw new RuntimeException("not a property: " + value); + } + + final Literal lit = (Literal) value; + + props.add(factory.fromLiteral(lit)); + + } + + return props; + + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Return the property names for an edge or vertex. + * + * @see {@link BigdataElement} + */ + public Set<String> getPropertyKeys(final URI uri) { + + try { + + final RepositoryResult<Statement> result = + cxn().getStatements(uri, null, null, false); + + final Set<String> properties = new LinkedHashSet<String>(); + + while (result.hasNext()) { + + final Statement stmt = result.next(); + + if (!(stmt.getObject() instanceof Literal)) { + continue; + } + + if (stmt.getPredicate().equals(RDFS.LABEL)) { + continue; + } + + final String p = + factory.fromPropertyURI(stmt.getPredicate()); + + properties.add(p); + + } + + return properties; + + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Remove all values for a particular property on an edge or vertex. + * + * @see {@link BigdataElement} + */ + public Object removeProperty(final URI uri, final String prop) { + + return removeProperty(uri, factory.toPropertyURI(prop)); + + } + + /** + * Remove all values for a particular property on an edge or vertex. + * + * @see {@link BigdataElement} + */ + public Object removeProperty(final URI uri, final URI prop) { + + try { + + final Object oldVal = getProperty(uri, prop); + + cxn().remove(uri, prop, null); + + return oldVal; + + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Set a single-value property on an edge or vertex (remove the old + * value first). + * + * @see {@link BigdataElement} + */ + public void setProperty(final URI uri, final String prop, final Object val) { + + setProperty(uri, factory.toPropertyURI(prop), factory.toLiteral(val)); + + } + + /** + * Set a single-value property on an edge or vertex (remove the old + * value first). + * + * @see {@link BigdataElement} + */ + public void setProperty(final URI uri, final URI prop, final Literal val) { + + try { + + cxn().remove(uri, prop, null); + + cxn().add(uri, prop, val); + + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Add a property on an edge or vertex (multi-value property extension). + * + * @see {@link BigdataElement} + */ + public void addProperty(final URI uri, final String prop, final Object val) { + + setProperty(uri, factory.toPropertyURI(prop), factory.toLiteral(val)); + + } + + /** + * Add a property on an edge or vertex (multi-value property extension). + * + * @see {@link BigdataElement} + */ + public void addProperty(final URI uri, final URI prop, final Literal val) { + + try { + + cxn().add(uri, prop, val); + + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Post a GraphML file to the remote server. (Bulk-upload operation.) + */ + public void loadGraphML(final String file) throws Exception { + + GraphMLReader.inputGraph(this, file); + + } + + /** + * Add an edge. + */ + @Override + public Edge addEdge(final Object key, final Vertex from, final Vertex to, + final String label) { + + if (label == null) { + throw new IllegalArgumentException(); + } + + final String eid = key != null ? key.toString() : UUID.randomUUID().toString(); + + final URI edgeURI = factory.toEdgeURI(eid); + + if (key != null) { + + final Edge edge = getEdge(key); + + if (edge != null) { + if (!(edge.getVertex(Direction.OUT).equals(from) && + (edge.getVertex(Direction.OUT).equals(to)))) { + throw new IllegalArgumentException("edge already exists: " + key); + } + } + + } + + try { + + // do we need to check this? +// if (cxn().hasStatement(edgeURI, RDF.TYPE, EDGE, false)) { +// throw new IllegalArgumentException("edge " + eid + " already exists"); +// } + + final URI fromURI = factory.toVertexURI(from.getId().toString()); + final URI toURI = factory.toVertexURI(to.getId().toString()); + + cxn().add(fromURI, edgeURI, toURI); + cxn().add(edgeURI, RDF.TYPE, EDGE); + cxn().add(edgeURI, RDFS.LABEL, factory.toLiteral(label)); + + return new BigdataEdge(new StatementImpl(fromURI, edgeURI, toURI), this); + + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Add a vertex. + */ + @Override + public Vertex addVertex(final Object key) { + + try { + + final String vid = key != null ? + key.toString() : UUID.randomUUID().toString(); + + final URI uri = factory.toVertexURI(vid); + + // do we need to check this? +// if (cxn().hasStatement(vertexURI, RDF.TYPE, VERTEX, false)) { +// throw new IllegalArgumentException("vertex " + vid + " already exists"); +// } + + cxn().add(uri, RDF.TYPE, VERTEX); + + return new BigdataVertex(uri, this); + + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Lookup an edge. + */ + @Override + public Edge getEdge(final Object key) { + + if (key == null) + throw new IllegalArgumentException(); + + try { + + final URI edge = factory.toEdgeURI(key.toString()); + + final RepositoryResult<Statement> result = + cxn().getStatements(null, edge, null, false); + + if (result.hasNext()) { + + final Statement stmt = result.next(); + + if (result.hasNext()) { + throw new RuntimeException( + "duplicate edge: " + key); + } + + return new BigdataEdge(stmt, this); + + } + + return null; + + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Iterate all edges. + */ + @Override + public Iterable<Edge> getEdges() { + + final URI wild = null; + return getEdges(wild, wild); + + } + + /** + * Find edges based on the from and to vertices and the edge labels, all + * optional parameters (can be null). The edge labels can be null to include + * all labels. + * <p> + * + * @param from + * the from vertex (null for wildcard) + * @param to + * the to vertex (null for wildcard) + * @param labels + * the edge labels to consider (optional) + * @return the edges matching the supplied criteria + */ + Iterable<Edge> getEdges(final URI from, final URI to, final String... labels) { + + final GraphQueryResult stmts = getElements(from, to, labels); + + return new EdgeIterable(stmts); + + } + + /** + * Translates the request to a high-performance SPARQL query: + * + * construct { + * ?from ?edge ?to . + * } where { + * ?edge rdf:type <Edge> . + * + * ?from ?edge ?to . + * + * # filter by edge label + * ?edge rdfs:label ?label . + * filter(?label in ("label1", "label2", ...)) . + * } + */ + protected GraphQueryResult getElements(final URI from, final URI to, + final String... labels) { + + final StringBuilder sb = new StringBuilder(); + sb.append("construct { ?from ?edge ?to . } where {\n"); + sb.append(" ?edge rdf:type bd:Edge .\n"); + sb.append(" ?from ?edge ?to .\n"); + if (labels != null && labels.length > 0) { + if (labels.length == 1) { + sb.append(" ?edge rdfs:label \"").append(labels[0]).append("\" .\n"); + } else { + sb.append(" ?edge rdfs:label ?label .\n"); + sb.append(" filter(?label in ("); + for (String label : labels) { + sb.append("\""+label+"\", "); + } + sb.setLength(sb.length()-2); + sb.append(")) .\n"); + } + } + sb.append("}"); + + // bind the from and/or to + final String queryStr = sb.toString() + .replace("?from", from != null ? "<"+from+">" : "?from") + .replace("?to", to != null ? "<"+to+">" : "?to"); + + try { + + final org.openrdf.query.GraphQuery query = + cxn().prepareGraphQuery(QueryLanguage.SPARQL, queryStr); + + final GraphQueryResult stmts = query.evaluate(); + + return stmts; + + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Find edges based on a SPARQL construct query. The query MUST construct + * edge statements: + * <p> + * construct { ?from ?edge ?to } where { ... } + * + * @see {@link BigdataGraphQuery} + */ + Iterable<Edge> getEdges(final String queryStr) { + + try { + + final org.openrdf.query.GraphQuery query = + cxn().prepareGraphQuery(QueryLanguage.SPARQL, queryStr); + + final GraphQueryResult stmts = query.evaluate(); + + return new EdgeIterable(stmts); + + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Find vertices based on the supplied from and to vertices and the edge + * labels. One or the other (from and to) must be null (wildcard), but not + * both. Use getEdges() for wildcards on both the from and to. The edge + * labels can be null to include all labels. + * + * @param from + * the from vertex (null for wildcard) + * @param to + * the to vertex (null for wildcard) + * @param labels + * the edge labels to consider (optional) + * @return + * the vertices matching the supplied criteria + */ + Iterable<Vertex> getVertices(final URI from, final URI to, + final String... labels) { + + if (from != null && to != null) { + throw new IllegalArgumentException(); + } + + if (from == null && to == null) { + throw new IllegalArgumentException(); + } + + final GraphQueryResult stmts = getElements(from, to, labels); + + return new VertexIterable(stmts, from == null); + + } + + /** + * Find vertices based on a SPARQL construct query. If the subject parameter + * is true, the vertices will be taken from the subject position of the + * constructed statements, otherwise they will be taken from the object + * position. + * + * @see {@link BigdataGraphQuery} + */ + Iterable<Vertex> getVertices(final String queryStr, final boolean subject) { + + try { + + final org.openrdf.query.GraphQuery query = + cxn().prepareGraphQuery(QueryLanguage.SPARQL, queryStr); + + final GraphQueryResult stmts = query.evaluate(); + + return new VertexIterable(stmts, subject); + + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Find edges with the supplied property value. + * + * construct { + * ?from ?edge ?to . + * } + * where { + * ?edge <prop> <val> . + * ?from ?edge ?to . + * } + */ + @Override + public Iterable<Edge> getEdges(final String prop, final Object val) { + + final URI p = factory.toPropertyURI(prop); + final Literal o = factory.toLiteral(val); + + try { + + final StringBuilder sb = new StringBuilder(); + sb.append("construct { ?from ?edge ?to . } where {\n"); + sb.append(" ?edge <"+p+"> "+o+" .\n"); + sb.append(" ?from ?edge ?to .\n"); + sb.append("}"); + + final String queryStr = sb.toString(); + + return getEdges(queryStr); + + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Lookup a vertex. + */ + @Override + public Vertex getVertex(final Object key) { + + if (key == null) + throw new IllegalArgumentException(); + + final URI uri = factory.toVertexURI(key.toString()); + + try { + + if (cxn().hasStatement(uri, RDF.TYPE, VERTEX, false)) { + return new BigdataVertex(uri, this); + } + + return null; + + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + + /** + * Iterate all vertices. + */ + @Override + public Iterable<Vertex> getVertices() { + + try { + + final RepositoryResult<Statement> result = + cxn().getStatements(null, RDF.TYPE, VERTEX, false); + + return new VertexIterable(result, true); + + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Find vertices with the supplied property value. + */ + @Override + public Iterable<Vertex> getVertices(final String prop, final Object val) { + + final URI p = factory.toPropertyURI(prop); + final Literal o = factory.toLiteral(val); + + try { + + final RepositoryResult<Statement> result = + cxn().getStatements(null, p, o, false); + + return new VertexIterable(result, true); + + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Providing an override implementation for our GraphQuery to avoid the + * low-performance scan and filter paradigm. See {@link BigdataGraphQuery}. + */ + @Override + public GraphQuery query() { +// return new DefaultGraphQuery(this); + return new BigdataGraphQuery(this); + } + + /** + * Remove an edge and its properties. + */ + @Override + public void removeEdge(final Edge edge) { + + try { + + final URI uri = factory.toURI(edge); + + if (!cxn().hasStatement(uri, RDF.TYPE, EDGE, false)) { + throw new IllegalStateException(); + } + + final URI wild = null; + + // remove the edge statement + cxn().remove(wild, uri, wild); + + // remove its properties + cxn().remove(uri, wild, wild); + + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Remove a vertex and its edges and properties. + */ + @Override + public void removeVertex(final Vertex vertex) { + + try { + + final URI uri = factory.toURI(vertex); + + if (!cxn().hasStatement(uri, RDF.TYPE, VERTEX, false)) { + throw new IllegalStateException(); + } + + final URI wild = null; + + // remove outgoing edges and properties + cxn().remove(uri, wild, wild); + + // remove incoming edges + cxn().remove(wild, wild, uri); + + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Translate a collection of Bigdata statements into an iteration of + * Blueprints vertices. + * + * @author mikepersonick + * + */ + public class VertexIterable implements Iterable<Vertex>, Iterator<Vertex> { + + private final CloseableIteration<Statement, ? extends OpenRDFException> stmts; + + private final boolean subject; + + private final List<Vertex> cache; + + public VertexIterable( + final CloseableIteration<Statement, ? extends OpenRDFException> stmts, + final boolean subject) { + this.stmts = stmts; + this.subject = subject; + this.cache = new LinkedList<Vertex>(); + } + + @Override + public boolean hasNext() { + try { + return stmts.hasNext(); + } catch (OpenRDFException e) { + throw new RuntimeException(e); + } + } + + @Override + public Vertex next() { + try { + final Statement stmt = stmts.next(); + final URI v = (URI) + (subject ? stmt.getSubject() : stmt.getObject()); + if (!hasNext()) { + stmts.close(); + } + final Vertex vertex = new BigdataVertex(v, BigdataGraph.this); + cache.add(vertex); + return vertex; + } catch (OpenRDFException e) { + throw new RuntimeException(e); + } + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + + @Override + public Iterator<Vertex> iterator() { + return hasNext() ? this : cache.iterator(); + } + + } + + /** + * Translate a collection of Bigdata statements into an iteration of + * Blueprints edges. + * + * @author mikepersonick + * + */ + public class EdgeIterable implements Iterable<Edge>, Iterator<Edge> { + + private final CloseableIteration<Statement, ? extends OpenRDFException> stmts; + + private final List<Edge> cache; + + public EdgeIterable( + final CloseableIteration<Statement, ? extends OpenRDFException> stmts) { + this.stmts = stmts; + this.cache = new LinkedList<Edge>(); + } + + @Override + public boolean hasNext() { + try { + return stmts.hasNext(); + } catch (OpenRDFException e) { + throw new RuntimeException(e); + } + } + + @Override + public Edge next() { + try { + final Statement stmt = stmts.next(); + if (!hasNext()) { + stmts.close(); + } + final Edge edge = new BigdataEdge(stmt, BigdataGraph.this); + cache.add(edge); + return edge; + } catch (OpenRDFException e) { + throw new RuntimeException(e); + } + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + + @Override + public Iterator<Edge> iterator() { + return hasNext() ? this : cache.iterator(); + } + + } + + /** + * Fuse two iterables together into one. Useful for combining IN and OUT + * edges for a vertex. + */ + public final <T> Iterable<T> fuse(final Iterable<T>... args) { + + return new FusedIterable<T>(args); + } + + /** + * Fuse two iterables together into one. Useful for combining IN and OUT + * edges for a vertex. + * + * @author mikepersonick + */ + public class FusedIterable<T> implements Iterable<T>, Iterator<T> { + + private final Iterable<T>[] args; + + private transient int i = 0; + + private transient Iterator<T> curr; + + public FusedIterable(final Iterable<T>... args) { + this.args = args; + this.curr = args[0].iterator(); + } + + @Override + public boolean hasNext() { + if (curr.hasNext()) { + return true; + } + while (!curr.hasNext() && i < (args.length-1)) { + curr = args[++i].iterator(); + if (curr.hasNext()) { + return true; + } + } + return false; + } + + @Override + public T next() { + return curr.next(); + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + + @Override + public Iterator<T> iterator() { + return this; + } + + } + + protected static final Features FEATURES = new Features(); + + @Override + public Features getFeatures() { + + return FEATURES; + + } + + static { + + FEATURES.supportsSerializableObjectProperty = false; + FEATURES.supportsBooleanProperty = true; + FEATURES.supportsDoubleProperty = true; + FEATURES.supportsFloatProperty = true; + FEATURES.supportsIntegerProperty = true; + FEATURES.supportsPrimitiveArrayProperty = false; + FEATURES.supportsUniformListProperty = false; + FEATURES.supportsMixedListProperty = false; + FEATURES.supportsLongProperty = true; + FEATURES.supportsMapProperty = false; + FEATURES.supportsStringProperty = true; + FEATURES.supportsDuplicateEdges = true; + FEATURES.supportsSelfLoops = true; + FEATURES.isPersistent = true; + FEATURES.isWrapper = false; + FEATURES.supportsVertexIteration = true; + FEATURES.supportsEdgeIteration = true; + FEATURES.supportsVertexIndex = false; + FEATURES.supportsEdgeIndex = false; + FEATURES.ignoresSuppliedIds = true; + FEATURES.supportsTransactions = false; + FEATURES.supportsIndices = true; + FEATURES.supportsKeyIndices = true; + FEATURES.supportsVertexKeyIndex = true; + FEATURES.supportsEdgeKeyIndex = true; + FEATURES.supportsEdgeRetrieval = true; + FEATURES.supportsVertexProperties = true; + FEATURES.supportsEdgeProperties = true; + FEATURES.supportsThreadedTransactions = false; + + } + +} Added: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataGraphBulkLoad.java =================================================================== --- branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataGraphBulkLoad.java (rev 0) +++ branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataGraphBulkLoad.java 2014-05-21 09:56:34 UTC (rev 8390) @@ -0,0 +1,298 @@ +/** +Copyright (C) SYSTAP, LLC 2006-2014. All rights reserved. + +Contact: + SYSTAP, LLC + 4501 Tower Road + Greensboro, NC 27410 + lic...@bi... + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package com.bigdata.blueprints; + +import java.util.UUID; + +import org.openrdf.model.Literal; +import org.openrdf.model.URI; +import org.openrdf.model.impl.StatementImpl; +import org.openrdf.model.vocabulary.RDF; +import org.openrdf.model.vocabulary.RDFS; +import org.openrdf.repository.RepositoryConnection; + +import com.bigdata.rdf.changesets.IChangeLog; +import com.bigdata.rdf.changesets.IChangeRecord; +import com.bigdata.rdf.sail.BigdataSailRepositoryConnection; +import com.tinkerpop.blueprints.Edge; +import com.tinkerpop.blueprints.Features; +import com.tinkerpop.blueprints.GraphQuery; +import com.tinkerpop.blueprints.TransactionalGraph; +import com.tinkerpop.blueprints.Vertex; + +/** + * Simple bulk loader that will insert graph data without any consistency + * checking (won't check for duplicate vertex or edge identifiers). Currently + * does not overwrite old property values, but we may need to change this. + * <p> + * Implements {@link IChangeLog} so that we can report a mutation count. + * + * @author mikepersonick + * + */ +public class BigdataGraphBulkLoad extends BigdataGraph + implements TransactionalGraph, IChangeLog { + + private final BigdataSailRepositoryConnection cxn; + + public BigdataGraphBulkLoad(final BigdataSailRepositoryConnection cxn) { + this(cxn, BigdataRDFFactory.INSTANCE); + } + + public BigdataGraphBulkLoad(final BigdataSailRepositoryConnection cxn, + final BlueprintsRDFFactory factory) { + super(factory); + + this.cxn = cxn; + this.cxn.addChangeLog(this); + } + + protected RepositoryConnection cxn() throws Exception { + return cxn; + } + + @Override + public void commit() { + try { + cxn.commit(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public void rollback() { + try { + cxn.rollback(); + cxn.close(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public void shutdown() { + try { + cxn.close(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + @Deprecated + public void stopTransaction(Conclusion arg0) { + } + + + static { + + FEATURES.supportsTransactions = true; + + } + + + @Override + public Edge getEdge(Object arg0) { + throw new UnsupportedOperationException(); + } + + @Override + public Iterable<Edge> getEdges() { + throw new UnsupportedOperationException(); + } + + @Override + public Iterable<Edge> getEdges(String arg0, Object arg1) { + throw new UnsupportedOperationException(); + } + + @Override + public Vertex getVertex(Object arg0) { + throw new UnsupportedOperationException(); + } + + @Override + public Iterable<Vertex> getVertices() { + throw new UnsupportedOperationException(); + } + + @Override + public Iterable<Vertex> getVertices(String arg0, Object arg1) { + throw new UnsupportedOperationException(); + } + + @Override + public GraphQuery query() { + throw new UnsupportedOperationException(); + } + + @Override + public void removeEdge(Edge arg0) { + throw new UnsupportedOperationException(); + } + + @Override + public void removeVertex(Vertex arg0) { + throw new UnsupportedOperationException(); + } + + /** + * Set a property without removing the old value first. + */ + @Override + public void setProperty(final URI s, final URI p, final Literal o) { + + try { + +// cxn().remove(s, p, null); + + cxn().add(s, p, o); + + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + /** + * Add a vertex without consistency checking (does not check for a duplicate + * identifier). + */ + @Override + public Vertex addVertex(final Object key) { + + try { + + final String vid = key != null ? + key.toString() : UUID.randomUUID().toString(); + + final URI uri = factory.toVertexURI(vid); + +// if (cxn().hasStatement(vertexURI, RDF.TYPE, VERTEX, false)) { +// throw new IllegalArgumentException("vertex " + vid + " already exists"); +// } + + cxn().add(uri, RDF.TYPE, VERTEX); + + return new BigdataVertex(uri, this); + + } catch (Exception ex) { + throw new RuntimeException(ex); + } + + } + + /** + * Add an edge without consistency checking (does not check for a duplicate + * identifier). + */ + @Override + public Edge addEdge(final Object key, final Vertex from, final Vertex to, + final String label) { + + if (label == null) { + throw new IllegalArgumentException(); + } + + final String eid = key != null ? key.toString() : UUID.randomUUID().toString(); + + final URI edgeURI = factory.toEdgeURI(eid); + +// if (key != null) { +// +// final Edge edge = getEdge(key); +// +// if (edge != null) { +// if (!(edge.getVertex(Direction.OUT).equals(from) && +// (edge.getVertex(Direction.OUT).equals(to)))) { +// throw new IllegalArgumentException("edge already exists: " + key); +// } +// } +// +// } + + try { + +// if (cxn().hasStatement(edgeURI, RDF.TYPE, EDGE, false)) { +// throw new IllegalArgumentException("edge " + eid + " already exists"); +// } + + final URI fromURI = factory.toVertexURI(from.getId().toString()); + final URI toURI = factory.toVertexURI(to.getId().toString()); + + cxn().add(fromURI, edgeURI, toURI); + cxn().add(edgeURI, RDF.TYPE, EDGE); + cxn().add(edgeURI, RDFS.LABEL, factory.toLiteral(label)); + + return new BigdataEdge(new StatementImpl(fromURI, edgeURI, toURI), this); + + } catch (Exception ex) { + throw new RuntimeException(ex); + } + + } + + private transient long mutationCountTotal = 0; + private transient long mutationCountCurrentCommit = 0; + private transient long mutationCountLastCommit = 0; + + @Override + public void changeEvent(final IChangeRecord record) { + mutationCountTotal++; + mutationCountCurrentCommit++; + } + + @Override + public void transactionBegin() { + } + + @Override + public void transactionPrepare() { + } + + @Override + public void transactionCommited(long commitTime) { + mutationCountLastCommit = mutationCountCurrentCommit; + mutationCountCurrentCommit = 0; + } + + @Override + public void transactionAborted() { + } + + public long getMutationCountTotal() { + return mutationCountTotal; + } + + public long getMutationCountCurrentCommit() { + return mutationCountCurrentCommit; + } + + public long getMutationCountLastCommit() { + return mutationCountLastCommit; + } + + + +} Added: branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataGraphClient.java =================================================================== --- branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataGraphClient.java (rev 0) +++ branches/DEPLOYMENT_BRANCH_1_3_1/bigdata-blueprints/src/java/com/bigdata/blueprints/BigdataGraphClient.java 2014-05-21 09:56:34 UTC (rev 8390) @@ -0,0 +1,160 @@ +/** +Copyright (C) SYSTAP, LLC 2006-Infinity. All rights reserved. + +Contact: + SYSTAP, LLC + 4501 Tower Road + Greensboro, NC 27410 + lic...@bi... + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package com.bigdata.blueprints; + +import com.bigdata.rdf.sail.remote.BigdataSailRemoteRepository; +import com.bigdata.rdf.sail.remote.BigdataSailRemoteRepositoryConnection; +import com.bigdata.rdf.sail.webapp.client.RemoteRepository; +import com.tinkerpop.blueprints.Features; + +/** + * This is a thin-client implementation of a Blueprints wrapper around the + * client library that interacts with the NanoSparqlServer. This is a functional + * implementation suitable for writing POCs - it is not a high performance + * implementation by any means (currently does not support caching or batched + * update). Does have a single "bulk upload" operation that wraps a method on + * RemoteRepository that will POST a graphml file to the blueprints layer of the + * bigdata server. + * + * @see {@link BigdataSailRemoteRepository} + * @see {@link BigdataSailRemoteRepositoryConnection} + * @see {@link RemoteRepository} + * + * @author mikepersonick + * + */ +public class BigdataGraphClient extends BigdataGraph { + + final BigdataSailRemoteRepository repo; + + transient BigdataSailRemoteRepositoryConnection cxn; + + public Bigda... [truncated message content] |