http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-csv/src/main/java/org/apache/jena/propertytable/impl/ColumnImpl.java ---------------------------------------------------------------------- diff --cc jena-csv/src/main/java/org/apache/jena/propertytable/impl/ColumnImpl.java index 808441a,808441a..ce456f9 --- a/jena-csv/src/main/java/org/apache/jena/propertytable/impl/ColumnImpl.java +++ b/jena-csv/src/main/java/org/apache/jena/propertytable/impl/ColumnImpl.java @@@ -1,57 -1,57 +1,57 @@@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one -- * or more contributor license agreements. See the NOTICE file -- * distributed with this work for additional information -- * regarding copyright ownership. The ASF licenses this file -- * to you 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. -- */ -- --package org.apache.jena.propertytable.impl; -- -- --import java.util.List; -- --import org.apache.jena.graph.Node ; --import org.apache.jena.propertytable.Column; --import org.apache.jena.propertytable.PropertyTable; -- --/** -- * The simple implementation of Column -- * -- */ --public class ColumnImpl implements Column { -- -- -- private final PropertyTable table; -- private Node p; -- -- ColumnImpl(PropertyTable table, Node p) { -- this.table = table; -- this.p = p; -- } -- -- @Override -- public PropertyTable getTable() { -- return table; -- } -- -- @Override -- public Node getColumnKey() { -- return p; -- } -- -- @Override -- public List<Node> getValues() { -- return table.getColumnValues(this); -- } --} ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one ++ * or more contributor license agreements. See the NOTICE file ++ * distributed with this work for additional information ++ * regarding copyright ownership. The ASF licenses this file ++ * to you 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. ++ */ ++ ++package org.apache.jena.propertytable.impl; ++ ++ ++import java.util.List; ++ ++import org.apache.jena.graph.Node ; ++import org.apache.jena.propertytable.Column; ++import org.apache.jena.propertytable.PropertyTable; ++ ++/** ++ * The simple implementation of Column ++ * ++ */ ++public class ColumnImpl implements Column { ++ ++ ++ private final PropertyTable table; ++ private Node p; ++ ++ ColumnImpl(PropertyTable table, Node p) { ++ this.table = table; ++ this.p = p; ++ } ++ ++ @Override ++ public PropertyTable getTable() { ++ return table; ++ } ++ ++ @Override ++ public Node getColumnKey() { ++ return p; ++ } ++ ++ @Override ++ public List<Node> getValues() { ++ return table.getColumnValues(this); ++ } ++}
http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableArrayImpl.java ---------------------------------------------------------------------- diff --cc jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableArrayImpl.java index 6b8bd6e,6b8bd6e..1920045 --- a/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableArrayImpl.java +++ b/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableArrayImpl.java @@@ -1,345 -1,345 +1,345 @@@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one -- * or more contributor license agreements. See the NOTICE file -- * distributed with this work for additional information -- * regarding copyright ownership. The ASF licenses this file -- * to you 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. -- */ -- --package org.apache.jena.propertytable.impl; -- --import java.util.ArrayList; --import java.util.Collection; --import java.util.HashMap; --import java.util.List; --import java.util.Map; -- --import org.apache.jena.atlas.iterator.Iter; --import org.apache.jena.atlas.iterator.IteratorConcat; --import org.apache.jena.graph.Node ; --import org.apache.jena.graph.Triple ; --import org.apache.jena.propertytable.Column; --import org.apache.jena.propertytable.PropertyTable; --import org.apache.jena.propertytable.Row; --import org.apache.jena.util.iterator.ExtendedIterator ; --import org.apache.jena.util.iterator.WrappedIterator ; -- --/** -- * A PropertyTable Implementation using a two dimension array. -- * It contains SPO and PSO indexes. -- * -- */ --public class PropertyTableArrayImpl implements PropertyTable { -- -- private final List<Node> rowList; -- private final List<Node> columnList; -- -- private final Map<Node, Integer> rowKeyToIndex; -- private final Map<Node, Integer> columnKeyToIndex; -- private final Node[][] array; -- private final int rowNum; -- private final int columnNum; -- -- public PropertyTableArrayImpl(int rowNum, int columnNum){ -- rowList = new ArrayList<Node>(rowNum); -- columnList = new ArrayList<Node>(columnNum); -- rowKeyToIndex = new HashMap<Node, Integer>(); -- columnKeyToIndex = new HashMap<Node, Integer>(); -- this.rowNum = rowNum; -- this.columnNum = columnNum; -- array = new Node [rowNum][columnNum]; -- } -- -- @Override -- public ExtendedIterator<Triple> getTripleIterator(Column column, Node value) { -- if (column == null || column.getColumnKey() == null) -- throw new NullPointerException("column is null"); -- -- if (value == null){ -- throw new NullPointerException("value is null"); -- } -- -- ArrayList<Triple> triples = new ArrayList<Triple>(); -- -- Node p = column.getColumnKey(); -- Integer columnIndex = this.columnKeyToIndex.get(p); -- if (columnIndex != null){ -- for(int rowIndex=0; rowIndex< rowList.size();rowIndex++){ -- if ( value.equals( this.get(rowIndex, columnIndex))){ -- triples.add(Triple.create(rowList.get(rowIndex), p, value)); -- } -- } -- } -- return WrappedIterator.create(triples.iterator()); -- } -- -- @Override -- public ExtendedIterator<Triple> getTripleIterator(Column column) { -- -- if (column == null || column.getColumnKey() == null) -- throw new NullPointerException("column is null"); -- -- ArrayList<Triple> triples = new ArrayList<Triple>(); -- -- Node p = column.getColumnKey(); -- Integer columnIndex = this.columnKeyToIndex.get(p); -- if (columnIndex != null){ -- for(int rowIndex=0; rowIndex< rowList.size();rowIndex++){ -- if(this.get(rowIndex, columnIndex)!=null){ -- triples.add(Triple.create(rowList.get(rowIndex), p, this.get(rowIndex, columnIndex))); -- } -- } -- } -- return WrappedIterator.create(triples.iterator()); -- } -- -- @Override -- public ExtendedIterator<Triple> getTripleIterator(Node value) { -- if (value == null) -- throw new NullPointerException("value is null"); -- -- IteratorConcat<Triple> iter = new IteratorConcat<Triple>(); -- for (Column column : this.getColumns()) { -- ExtendedIterator<Triple> eIter = getTripleIterator(column,value); -- iter.add(eIter); -- } -- return WrappedIterator.create(Iter.distinct(iter)); -- } -- -- @Override -- public ExtendedIterator<Triple> getTripleIterator(Row row) { -- if (row == null || row.getRowKey() == null) -- throw new NullPointerException("row is null"); -- -- ArrayList<Triple> triples = new ArrayList<Triple>(); -- Integer rowIndex = this.rowKeyToIndex.get(row.getRowKey()); -- -- if (rowIndex != null){ -- for(int columnIndex=0; columnIndex < columnList.size(); columnIndex++){ -- triples.add(Triple.create( row.getRowKey(), columnList.get(columnIndex), this.get(rowIndex, columnIndex))); -- } -- } -- return WrappedIterator.create(triples.iterator()); -- } -- -- @Override -- public ExtendedIterator<Triple> getTripleIterator() { -- -- IteratorConcat<Triple> iter = new IteratorConcat<Triple>(); -- for (Column column : getColumns()) { -- iter.add(getTripleIterator(column)); -- } -- return WrappedIterator.create(Iter.distinct(iter)); -- } -- -- @Override -- public Collection<Column> getColumns() { -- Collection<Column> columns = new ArrayList<Column>(); -- for(Node p: columnKeyToIndex.keySet() ){ -- columns.add(new ColumnImpl(this, p)); -- } -- return columns; -- } -- -- @Override -- public Column getColumn(Node p) { -- if (p == null) -- throw new NullPointerException("column name is null"); -- Integer columnIndex = columnKeyToIndex.get(p); -- return (columnIndex == null) -- ? null : new ColumnImpl(this, p); -- } -- -- @Override -- public Column createColumn(Node p) { -- if (p == null) -- throw new NullPointerException("column name is null"); -- -- if (columnKeyToIndex.containsKey(p)) -- throw new IllegalArgumentException("column already exists: '" -- + p.toString()); -- -- if (columnList.size()>= columnNum) -- throw new IllegalArgumentException("cannot create new column for max column count: " + columnNum); -- -- columnList.add(p); -- columnKeyToIndex.put(p, columnList.indexOf(p)); -- return getColumn(p); -- } -- -- @Override -- public Row getRow(Node s) { -- if (s == null) -- throw new NullPointerException("subject node is null"); -- -- Integer rowIndex = rowKeyToIndex.get(s); -- return (rowIndex == null) ? null : new InternalRow(rowIndex); -- } -- -- @Override -- public Row createRow(Node s) { -- Row row = this.getRow(s); -- if (row != null) -- return row; -- -- if (rowList.size()>= rowNum) -- throw new IllegalArgumentException("cannot create new row for max row count: " + rowNum); -- -- rowList.add(s); -- int rowIndex = rowList.indexOf(s); -- rowKeyToIndex.put(s, rowIndex); -- -- return new InternalRow(rowIndex); -- } -- -- private void set(int rowIndex, int columnIndex, Node value) { -- -- if (rowIndex >= rowList.size()) -- throw new IllegalArgumentException("row index out of bound: " + rowList.size()); -- if (columnIndex >= columnList.size()) -- throw new IllegalArgumentException("column index out of bound: " + columnList.size()); -- array[rowIndex][columnIndex] = value; -- } -- -- public Node get(int rowIndex, int columnIndex) { -- if (rowIndex >= rowList.size()) -- throw new IllegalArgumentException("row index out of bound: " + rowList.size()); -- if (columnIndex >= columnList.size()) -- throw new IllegalArgumentException("column index out of bound: " + columnList.size()); -- return array[rowIndex][columnIndex]; -- } -- -- @Override -- public List<Row> getAllRows() { -- ArrayList<Row> rows = new ArrayList<Row>(); -- for (int rowIndex=0;rowIndex<rowList.size();rowIndex++){ -- rows.add( new InternalRow(rowIndex)); -- } -- return rows; -- } -- -- @Override -- public List<Node> getColumnValues(Column column) { -- if (column == null || column.getColumnKey() == null) -- throw new NullPointerException("column is null"); -- -- Node p = column.getColumnKey(); -- Integer columnIndex = this.columnKeyToIndex.get(p); -- -- List<Node> list = new ArrayList<Node>(); -- -- if (columnIndex != null){ -- for(int rowIndex=0; rowIndex< rowList.size();rowIndex++){ -- if(this.get(rowIndex, columnIndex)!=null){ -- list.add(this.get(rowIndex, columnIndex)); -- } -- } -- } -- return list; -- } -- -- -- @Override -- public Collection<Row> getMatchingRows(Column column, Node value) { -- -- if (column == null || column.getColumnKey() == null) -- throw new NullPointerException("column is null"); -- -- if (value == null){ -- throw new NullPointerException("value is null"); -- } -- -- final ArrayList<Row> matchingRows = new ArrayList<Row>(); -- -- Node p = column.getColumnKey(); -- Integer columnIndex = this.columnKeyToIndex.get(p); -- if (columnIndex != null){ -- for(int rowIndex=0; rowIndex< rowList.size();rowIndex++){ -- if ( value.equals( this.get(rowIndex, columnIndex))){ -- matchingRows.add( this.getRow( rowList.get(rowIndex) )); -- } -- } -- } -- return matchingRows; -- } -- -- private final class InternalRow implements Row { -- -- final int rowIndex; -- -- InternalRow(int rowIndex) { -- this.rowIndex = rowIndex; -- } -- -- @Override -- public PropertyTable getTable() { -- return PropertyTableArrayImpl.this; -- } -- -- @Override -- public void setValue(Column column, Node value) { -- if (column == null || column.getColumnKey() == null) -- throw new NullPointerException("column is null"); -- -- Integer columnIndex = columnKeyToIndex.get(column.getColumnKey()); -- if (columnIndex == null) -- throw new IllegalArgumentException("column index does not exist: " + column.getColumnKey()); -- -- set(rowIndex, columnIndex, value); -- -- } -- -- @Override -- public Node getValue(Column column) { -- if (column == null) -- throw new NullPointerException("column is null"); -- return this.getValue(column.getColumnKey()); -- } -- -- @Override -- public Node getValue(Node columnKey) { -- if (columnKey == null) -- throw new NullPointerException("column key is null"); -- -- Integer columnIndex = columnKeyToIndex.get(columnKey); -- if (columnIndex == null) -- throw new IllegalArgumentException("column index does not exist: " + columnKey); -- -- return get(rowIndex, columnIndex); -- } -- -- @Override -- public Node getRowKey() { -- return rowList.get(rowIndex); -- } -- -- @Override -- public ExtendedIterator<Triple> getTripleIterator() { -- ArrayList<Triple> triples = new ArrayList<Triple>(); -- for (int columnIndex=0;columnIndex<columnList.size();columnIndex++) { -- triples.add(Triple.create(getRowKey(), columnList.get(columnIndex), get(rowIndex, columnIndex))); -- } -- return WrappedIterator.create(triples.iterator()); -- } -- -- @Override -- public Collection<Column> getColumns() { -- return PropertyTableArrayImpl.this.getColumns(); -- } -- -- } -- -- -- -- --} ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one ++ * or more contributor license agreements. See the NOTICE file ++ * distributed with this work for additional information ++ * regarding copyright ownership. The ASF licenses this file ++ * to you 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. ++ */ ++ ++package org.apache.jena.propertytable.impl; ++ ++import java.util.ArrayList; ++import java.util.Collection; ++import java.util.HashMap; ++import java.util.List; ++import java.util.Map; ++ ++import org.apache.jena.atlas.iterator.Iter; ++import org.apache.jena.atlas.iterator.IteratorConcat; ++import org.apache.jena.graph.Node ; ++import org.apache.jena.graph.Triple ; ++import org.apache.jena.propertytable.Column; ++import org.apache.jena.propertytable.PropertyTable; ++import org.apache.jena.propertytable.Row; ++import org.apache.jena.util.iterator.ExtendedIterator ; ++import org.apache.jena.util.iterator.WrappedIterator ; ++ ++/** ++ * A PropertyTable Implementation using a two dimension array. ++ * It contains SPO and PSO indexes. ++ * ++ */ ++public class PropertyTableArrayImpl implements PropertyTable { ++ ++ private final List<Node> rowList; ++ private final List<Node> columnList; ++ ++ private final Map<Node, Integer> rowKeyToIndex; ++ private final Map<Node, Integer> columnKeyToIndex; ++ private final Node[][] array; ++ private final int rowNum; ++ private final int columnNum; ++ ++ public PropertyTableArrayImpl(int rowNum, int columnNum){ ++ rowList = new ArrayList<Node>(rowNum); ++ columnList = new ArrayList<Node>(columnNum); ++ rowKeyToIndex = new HashMap<Node, Integer>(); ++ columnKeyToIndex = new HashMap<Node, Integer>(); ++ this.rowNum = rowNum; ++ this.columnNum = columnNum; ++ array = new Node [rowNum][columnNum]; ++ } ++ ++ @Override ++ public ExtendedIterator<Triple> getTripleIterator(Column column, Node value) { ++ if (column == null || column.getColumnKey() == null) ++ throw new NullPointerException("column is null"); ++ ++ if (value == null){ ++ throw new NullPointerException("value is null"); ++ } ++ ++ ArrayList<Triple> triples = new ArrayList<Triple>(); ++ ++ Node p = column.getColumnKey(); ++ Integer columnIndex = this.columnKeyToIndex.get(p); ++ if (columnIndex != null){ ++ for(int rowIndex=0; rowIndex< rowList.size();rowIndex++){ ++ if ( value.equals( this.get(rowIndex, columnIndex))){ ++ triples.add(Triple.create(rowList.get(rowIndex), p, value)); ++ } ++ } ++ } ++ return WrappedIterator.create(triples.iterator()); ++ } ++ ++ @Override ++ public ExtendedIterator<Triple> getTripleIterator(Column column) { ++ ++ if (column == null || column.getColumnKey() == null) ++ throw new NullPointerException("column is null"); ++ ++ ArrayList<Triple> triples = new ArrayList<Triple>(); ++ ++ Node p = column.getColumnKey(); ++ Integer columnIndex = this.columnKeyToIndex.get(p); ++ if (columnIndex != null){ ++ for(int rowIndex=0; rowIndex< rowList.size();rowIndex++){ ++ if(this.get(rowIndex, columnIndex)!=null){ ++ triples.add(Triple.create(rowList.get(rowIndex), p, this.get(rowIndex, columnIndex))); ++ } ++ } ++ } ++ return WrappedIterator.create(triples.iterator()); ++ } ++ ++ @Override ++ public ExtendedIterator<Triple> getTripleIterator(Node value) { ++ if (value == null) ++ throw new NullPointerException("value is null"); ++ ++ IteratorConcat<Triple> iter = new IteratorConcat<Triple>(); ++ for (Column column : this.getColumns()) { ++ ExtendedIterator<Triple> eIter = getTripleIterator(column,value); ++ iter.add(eIter); ++ } ++ return WrappedIterator.create(Iter.distinct(iter)); ++ } ++ ++ @Override ++ public ExtendedIterator<Triple> getTripleIterator(Row row) { ++ if (row == null || row.getRowKey() == null) ++ throw new NullPointerException("row is null"); ++ ++ ArrayList<Triple> triples = new ArrayList<Triple>(); ++ Integer rowIndex = this.rowKeyToIndex.get(row.getRowKey()); ++ ++ if (rowIndex != null){ ++ for(int columnIndex=0; columnIndex < columnList.size(); columnIndex++){ ++ triples.add(Triple.create( row.getRowKey(), columnList.get(columnIndex), this.get(rowIndex, columnIndex))); ++ } ++ } ++ return WrappedIterator.create(triples.iterator()); ++ } ++ ++ @Override ++ public ExtendedIterator<Triple> getTripleIterator() { ++ ++ IteratorConcat<Triple> iter = new IteratorConcat<Triple>(); ++ for (Column column : getColumns()) { ++ iter.add(getTripleIterator(column)); ++ } ++ return WrappedIterator.create(Iter.distinct(iter)); ++ } ++ ++ @Override ++ public Collection<Column> getColumns() { ++ Collection<Column> columns = new ArrayList<Column>(); ++ for(Node p: columnKeyToIndex.keySet() ){ ++ columns.add(new ColumnImpl(this, p)); ++ } ++ return columns; ++ } ++ ++ @Override ++ public Column getColumn(Node p) { ++ if (p == null) ++ throw new NullPointerException("column name is null"); ++ Integer columnIndex = columnKeyToIndex.get(p); ++ return (columnIndex == null) ++ ? null : new ColumnImpl(this, p); ++ } ++ ++ @Override ++ public Column createColumn(Node p) { ++ if (p == null) ++ throw new NullPointerException("column name is null"); ++ ++ if (columnKeyToIndex.containsKey(p)) ++ throw new IllegalArgumentException("column already exists: '" ++ + p.toString()); ++ ++ if (columnList.size()>= columnNum) ++ throw new IllegalArgumentException("cannot create new column for max column count: " + columnNum); ++ ++ columnList.add(p); ++ columnKeyToIndex.put(p, columnList.indexOf(p)); ++ return getColumn(p); ++ } ++ ++ @Override ++ public Row getRow(Node s) { ++ if (s == null) ++ throw new NullPointerException("subject node is null"); ++ ++ Integer rowIndex = rowKeyToIndex.get(s); ++ return (rowIndex == null) ? null : new InternalRow(rowIndex); ++ } ++ ++ @Override ++ public Row createRow(Node s) { ++ Row row = this.getRow(s); ++ if (row != null) ++ return row; ++ ++ if (rowList.size()>= rowNum) ++ throw new IllegalArgumentException("cannot create new row for max row count: " + rowNum); ++ ++ rowList.add(s); ++ int rowIndex = rowList.indexOf(s); ++ rowKeyToIndex.put(s, rowIndex); ++ ++ return new InternalRow(rowIndex); ++ } ++ ++ private void set(int rowIndex, int columnIndex, Node value) { ++ ++ if (rowIndex >= rowList.size()) ++ throw new IllegalArgumentException("row index out of bound: " + rowList.size()); ++ if (columnIndex >= columnList.size()) ++ throw new IllegalArgumentException("column index out of bound: " + columnList.size()); ++ array[rowIndex][columnIndex] = value; ++ } ++ ++ public Node get(int rowIndex, int columnIndex) { ++ if (rowIndex >= rowList.size()) ++ throw new IllegalArgumentException("row index out of bound: " + rowList.size()); ++ if (columnIndex >= columnList.size()) ++ throw new IllegalArgumentException("column index out of bound: " + columnList.size()); ++ return array[rowIndex][columnIndex]; ++ } ++ ++ @Override ++ public List<Row> getAllRows() { ++ ArrayList<Row> rows = new ArrayList<Row>(); ++ for (int rowIndex=0;rowIndex<rowList.size();rowIndex++){ ++ rows.add( new InternalRow(rowIndex)); ++ } ++ return rows; ++ } ++ ++ @Override ++ public List<Node> getColumnValues(Column column) { ++ if (column == null || column.getColumnKey() == null) ++ throw new NullPointerException("column is null"); ++ ++ Node p = column.getColumnKey(); ++ Integer columnIndex = this.columnKeyToIndex.get(p); ++ ++ List<Node> list = new ArrayList<Node>(); ++ ++ if (columnIndex != null){ ++ for(int rowIndex=0; rowIndex< rowList.size();rowIndex++){ ++ if(this.get(rowIndex, columnIndex)!=null){ ++ list.add(this.get(rowIndex, columnIndex)); ++ } ++ } ++ } ++ return list; ++ } ++ ++ ++ @Override ++ public Collection<Row> getMatchingRows(Column column, Node value) { ++ ++ if (column == null || column.getColumnKey() == null) ++ throw new NullPointerException("column is null"); ++ ++ if (value == null){ ++ throw new NullPointerException("value is null"); ++ } ++ ++ final ArrayList<Row> matchingRows = new ArrayList<Row>(); ++ ++ Node p = column.getColumnKey(); ++ Integer columnIndex = this.columnKeyToIndex.get(p); ++ if (columnIndex != null){ ++ for(int rowIndex=0; rowIndex< rowList.size();rowIndex++){ ++ if ( value.equals( this.get(rowIndex, columnIndex))){ ++ matchingRows.add( this.getRow( rowList.get(rowIndex) )); ++ } ++ } ++ } ++ return matchingRows; ++ } ++ ++ private final class InternalRow implements Row { ++ ++ final int rowIndex; ++ ++ InternalRow(int rowIndex) { ++ this.rowIndex = rowIndex; ++ } ++ ++ @Override ++ public PropertyTable getTable() { ++ return PropertyTableArrayImpl.this; ++ } ++ ++ @Override ++ public void setValue(Column column, Node value) { ++ if (column == null || column.getColumnKey() == null) ++ throw new NullPointerException("column is null"); ++ ++ Integer columnIndex = columnKeyToIndex.get(column.getColumnKey()); ++ if (columnIndex == null) ++ throw new IllegalArgumentException("column index does not exist: " + column.getColumnKey()); ++ ++ set(rowIndex, columnIndex, value); ++ ++ } ++ ++ @Override ++ public Node getValue(Column column) { ++ if (column == null) ++ throw new NullPointerException("column is null"); ++ return this.getValue(column.getColumnKey()); ++ } ++ ++ @Override ++ public Node getValue(Node columnKey) { ++ if (columnKey == null) ++ throw new NullPointerException("column key is null"); ++ ++ Integer columnIndex = columnKeyToIndex.get(columnKey); ++ if (columnIndex == null) ++ throw new IllegalArgumentException("column index does not exist: " + columnKey); ++ ++ return get(rowIndex, columnIndex); ++ } ++ ++ @Override ++ public Node getRowKey() { ++ return rowList.get(rowIndex); ++ } ++ ++ @Override ++ public ExtendedIterator<Triple> getTripleIterator() { ++ ArrayList<Triple> triples = new ArrayList<Triple>(); ++ for (int columnIndex=0;columnIndex<columnList.size();columnIndex++) { ++ triples.add(Triple.create(getRowKey(), columnList.get(columnIndex), get(rowIndex, columnIndex))); ++ } ++ return WrappedIterator.create(triples.iterator()); ++ } ++ ++ @Override ++ public Collection<Column> getColumns() { ++ return PropertyTableArrayImpl.this.getColumns(); ++ } ++ ++ } ++ ++ ++ ++ ++} http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableBuilder.java ---------------------------------------------------------------------- diff --cc jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableBuilder.java index 0532dc9,0532dc9..a0c5af1 --- a/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableBuilder.java +++ b/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableBuilder.java @@@ -1,135 -1,135 +1,135 @@@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one -- * or more contributor license agreements. See the NOTICE file -- * distributed with this work for additional information -- * regarding copyright ownership. The ASF licenses this file -- * to you 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. -- */ -- --package org.apache.jena.propertytable.impl; -- --import java.io.InputStream ; --import java.util.ArrayList ; --import java.util.Iterator ; --import java.util.List ; -- --import org.apache.jena.atlas.csv.CSVParser ; --import org.apache.jena.atlas.io.IO ; --import org.apache.jena.datatypes.xsd.XSDDatatype ; --import org.apache.jena.graph.Node ; --import org.apache.jena.graph.NodeFactory ; --import org.apache.jena.propertytable.PropertyTable ; --import org.apache.jena.propertytable.Row ; --import org.apache.jena.propertytable.lang.LangCSV ; --import org.apache.jena.riot.system.IRIResolver ; -- -- --/** -- * A tool for constructing PropertyTable from a file (e.g., a CSV file). -- * -- * -- */ --public class PropertyTableBuilder { -- -- public static Node CSV_ROW_NODE = NodeFactory.createURI(LangCSV.CSV_ROW); -- -- public static PropertyTable buildPropetyTableHashMapImplFromCsv(String csvFilePath) { -- PropertyTable table = new PropertyTableHashMapImpl(); -- return fillPropertyTable(table, csvFilePath); -- } -- -- public static PropertyTable buildPropetyTableArrayImplFromCsv(String csvFilePath) { -- PropertyTable table = createEmptyPropertyTableArrayImpl(csvFilePath); -- return fillPropertyTable(table, csvFilePath); -- } -- -- private static PropertyTable createEmptyPropertyTableArrayImpl (String csvFilePath) { -- CSVParser parser = CSVParser.create(csvFilePath); -- List<String> rowLine = null; -- int rowNum = 0; -- int columnNum = 0; -- -- while ((rowLine = parser.parse1()) != null) { -- if (rowNum == 0) { -- columnNum = rowLine.size(); -- } -- rowNum++; -- } -- if (rowNum!=0 && columnNum!=0){ -- return new PropertyTableArrayImpl(rowNum, columnNum+1); -- } else { -- return null; -- } -- } -- -- protected static PropertyTable fillPropertyTable(PropertyTable table, String csvFilePath ){ -- InputStream input = IO.openFile(csvFilePath) ; -- CSVParser iterator = CSVParser.create(input) ; -- return fillPropertyTable(table, iterator, csvFilePath); -- } -- -- protected static PropertyTable fillPropertyTable(PropertyTable table, CSVParser parser, String csvFilePath){ -- if (table == null){ -- return null; -- } -- ArrayList<Node> predicates = new ArrayList<Node>(); -- int rowNum = 0; -- -- Iterator<List<String>> iter = parser.iterator() ; -- if ( ! iter.hasNext() ) -- return table ; -- List<String> row1 = iter.next() ; -- table.createColumn(CSV_ROW_NODE); -- for (String column : row1) { -- String uri = createColumnKeyURI(csvFilePath, column); -- Node p = NodeFactory.createURI(uri); -- predicates.add(p); -- table.createColumn(p); -- } -- -- rowNum++ ; -- while(iter.hasNext()) { -- List<String> rowLine = iter.next(); -- Node subject = LangCSV.caculateSubject(rowNum, csvFilePath); -- Row row = table.createRow(subject); -- -- row.setValue(table.getColumn(CSV_ROW_NODE), -- NodeFactory.createLiteral((rowNum + ""), XSDDatatype.XSDinteger)); -- -- for (int col = 0; col < rowLine.size() && col<predicates.size(); col++) { -- -- String columnValue = rowLine.get(col).trim(); -- if("".equals(columnValue)){ -- continue; -- } -- Node o; -- try { -- // Try for a double. -- double d = Double.parseDouble(columnValue); -- o = NodeFactory.createLiteral(columnValue, -- XSDDatatype.XSDdouble); -- } catch (Exception e) { -- o = NodeFactory.createLiteral(columnValue); -- } -- row.setValue(table.getColumn(predicates.get(col)), o); -- } -- rowNum++ ; -- } -- return table; -- } -- -- protected static String createColumnKeyURI(String csvFilePath, String column){ -- String uri = IRIResolver.resolveString(csvFilePath) + "#" + LangCSV.toSafeLocalname(column); -- return uri; -- } --} ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one ++ * or more contributor license agreements. See the NOTICE file ++ * distributed with this work for additional information ++ * regarding copyright ownership. The ASF licenses this file ++ * to you 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. ++ */ ++ ++package org.apache.jena.propertytable.impl; ++ ++import java.io.InputStream ; ++import java.util.ArrayList ; ++import java.util.Iterator ; ++import java.util.List ; ++ ++import org.apache.jena.atlas.csv.CSVParser ; ++import org.apache.jena.atlas.io.IO ; ++import org.apache.jena.datatypes.xsd.XSDDatatype ; ++import org.apache.jena.graph.Node ; ++import org.apache.jena.graph.NodeFactory ; ++import org.apache.jena.propertytable.PropertyTable ; ++import org.apache.jena.propertytable.Row ; ++import org.apache.jena.propertytable.lang.LangCSV ; ++import org.apache.jena.riot.system.IRIResolver ; ++ ++ ++/** ++ * A tool for constructing PropertyTable from a file (e.g., a CSV file). ++ * ++ * ++ */ ++public class PropertyTableBuilder { ++ ++ public static Node CSV_ROW_NODE = NodeFactory.createURI(LangCSV.CSV_ROW); ++ ++ public static PropertyTable buildPropetyTableHashMapImplFromCsv(String csvFilePath) { ++ PropertyTable table = new PropertyTableHashMapImpl(); ++ return fillPropertyTable(table, csvFilePath); ++ } ++ ++ public static PropertyTable buildPropetyTableArrayImplFromCsv(String csvFilePath) { ++ PropertyTable table = createEmptyPropertyTableArrayImpl(csvFilePath); ++ return fillPropertyTable(table, csvFilePath); ++ } ++ ++ private static PropertyTable createEmptyPropertyTableArrayImpl (String csvFilePath) { ++ CSVParser parser = CSVParser.create(csvFilePath); ++ List<String> rowLine = null; ++ int rowNum = 0; ++ int columnNum = 0; ++ ++ while ((rowLine = parser.parse1()) != null) { ++ if (rowNum == 0) { ++ columnNum = rowLine.size(); ++ } ++ rowNum++; ++ } ++ if (rowNum!=0 && columnNum!=0){ ++ return new PropertyTableArrayImpl(rowNum, columnNum+1); ++ } else { ++ return null; ++ } ++ } ++ ++ protected static PropertyTable fillPropertyTable(PropertyTable table, String csvFilePath ){ ++ InputStream input = IO.openFile(csvFilePath) ; ++ CSVParser iterator = CSVParser.create(input) ; ++ return fillPropertyTable(table, iterator, csvFilePath); ++ } ++ ++ protected static PropertyTable fillPropertyTable(PropertyTable table, CSVParser parser, String csvFilePath){ ++ if (table == null){ ++ return null; ++ } ++ ArrayList<Node> predicates = new ArrayList<Node>(); ++ int rowNum = 0; ++ ++ Iterator<List<String>> iter = parser.iterator() ; ++ if ( ! iter.hasNext() ) ++ return table ; ++ List<String> row1 = iter.next() ; ++ table.createColumn(CSV_ROW_NODE); ++ for (String column : row1) { ++ String uri = createColumnKeyURI(csvFilePath, column); ++ Node p = NodeFactory.createURI(uri); ++ predicates.add(p); ++ table.createColumn(p); ++ } ++ ++ rowNum++ ; ++ while(iter.hasNext()) { ++ List<String> rowLine = iter.next(); ++ Node subject = LangCSV.caculateSubject(rowNum, csvFilePath); ++ Row row = table.createRow(subject); ++ ++ row.setValue(table.getColumn(CSV_ROW_NODE), ++ NodeFactory.createLiteral((rowNum + ""), XSDDatatype.XSDinteger)); ++ ++ for (int col = 0; col < rowLine.size() && col<predicates.size(); col++) { ++ ++ String columnValue = rowLine.get(col).trim(); ++ if("".equals(columnValue)){ ++ continue; ++ } ++ Node o; ++ try { ++ // Try for a double. ++ double d = Double.parseDouble(columnValue); ++ o = NodeFactory.createLiteral(columnValue, ++ XSDDatatype.XSDdouble); ++ } catch (Exception e) { ++ o = NodeFactory.createLiteral(columnValue); ++ } ++ row.setValue(table.getColumn(predicates.get(col)), o); ++ } ++ rowNum++ ; ++ } ++ return table; ++ } ++ ++ protected static String createColumnKeyURI(String csvFilePath, String column){ ++ String uri = IRIResolver.resolveString(csvFilePath) + "#" + LangCSV.toSafeLocalname(column); ++ return uri; ++ } ++} http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableHashMapImpl.java ---------------------------------------------------------------------- diff --cc jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableHashMapImpl.java index 622b3f1,622b3f1..45ec40f --- a/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableHashMapImpl.java +++ b/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableHashMapImpl.java @@@ -1,352 -1,352 +1,352 @@@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one -- * or more contributor license agreements. See the NOTICE file -- * distributed with this work for additional information -- * regarding copyright ownership. The ASF licenses this file -- * to you 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. -- */ -- --package org.apache.jena.propertytable.impl; -- --import java.util.* ; --import java.util.Map.Entry; -- --import org.apache.jena.atlas.iterator.Iter; --import org.apache.jena.atlas.iterator.IteratorConcat; --import org.apache.jena.ext.com.google.common.collect.HashMultimap; --import org.apache.jena.ext.com.google.common.collect.SetMultimap ; --import org.apache.jena.graph.Node ; --import org.apache.jena.graph.Triple ; --import org.apache.jena.propertytable.Column; --import org.apache.jena.propertytable.PropertyTable; --import org.apache.jena.propertytable.Row; --import org.apache.jena.util.iterator.ExtendedIterator ; --import org.apache.jena.util.iterator.NullIterator ; --import org.apache.jena.util.iterator.WrappedIterator ; -- --/** -- * A PropertyTable Implementation using HashMap. -- * It contains PSO and POS indexes. -- * -- */ --public class PropertyTableHashMapImpl implements PropertyTable { -- -- private Map<Node, Column> columnIndex; // Maps property Node key to Column -- private List<Column> columnList; // Stores the list of columns in the table -- private Map<Node, Row> rowIndex; // Maps the subject Node key to Row. -- private List<Row> rowList; // Stores the list of rows in the table -- -- // PSO index -- // Maps column Node to (subject Node, value) pairs -- private Map<Node, Map<Node, Node>> valueIndex; -- // POS index -- // Maps column Node to (value, subject Node) pairs -- private Map<Node, SetMultimap<Node, Node>> valueReverseIndex; -- -- PropertyTableHashMapImpl() { -- columnIndex = new HashMap<Node, Column>(); -- columnList = new ArrayList<Column>(); -- rowIndex = new HashMap<Node, Row>(); -- rowList = new ArrayList<Row>(); -- valueIndex = new HashMap<Node, Map<Node, Node>>(); -- valueReverseIndex = new HashMap<Node, SetMultimap<Node, Node>>(); -- } -- -- @Override -- public ExtendedIterator<Triple> getTripleIterator() { -- -- // use PSO index to scan all the table (slow) -- IteratorConcat<Triple> iter = new IteratorConcat<Triple>(); -- for (Column column : getColumns()) { -- iter.add(getTripleIterator(column)); -- } -- return WrappedIterator.create(Iter.distinct(iter)); -- } -- -- @Override -- public ExtendedIterator<Triple> getTripleIterator(Column column) { -- -- // use PSO index directly (fast) -- -- if (column == null || column.getColumnKey() == null) -- throw new NullPointerException("column is null"); -- -- ArrayList<Triple> triples = new ArrayList<Triple>(); -- Map<Node, Node> values = valueIndex.get(column.getColumnKey()); -- -- for (Entry<Node, Node> entry : values.entrySet()) { -- Node subject = entry.getKey(); -- Node value = entry.getValue(); -- triples.add(Triple.create(subject, column.getColumnKey(), value)); -- } -- return WrappedIterator.create(triples.iterator()); -- } -- -- @Override -- public ExtendedIterator<Triple> getTripleIterator(Node value) { -- -- // use POS index ( O(n), n= column count ) -- -- if (value == null) -- throw new NullPointerException("value is null"); -- -- IteratorConcat<Triple> iter = new IteratorConcat<Triple>(); -- for (Column column : this.getColumns()) { -- ExtendedIterator<Triple> eIter = getTripleIterator(column,value); -- iter.add(eIter); -- } -- return WrappedIterator.create(Iter.distinct(iter)); -- } -- -- @Override -- public ExtendedIterator<Triple> getTripleIterator(Column column, Node value) { -- -- // use POS index directly (fast) -- -- if (column == null || column.getColumnKey() == null) -- throw new NullPointerException("column is null"); -- -- if (value == null) -- throw new NullPointerException("value is null"); -- -- -- Node p = column.getColumnKey(); -- final SetMultimap<Node, Node> valueToSubjectMap = valueReverseIndex.get(p); -- if ( valueToSubjectMap == null ) -- return NullIterator.instance() ; -- final Set<Node> subjects = valueToSubjectMap.get(value); -- ArrayList<Triple> triples = new ArrayList<Triple>(); -- for (Node subject : subjects) { -- triples.add(Triple.create(subject, p, value)); -- } -- return WrappedIterator.create(triples.iterator()); -- } -- -- -- @Override -- public ExtendedIterator<Triple> getTripleIterator(Row row) { -- // use PSO index ( O(n), n= column count ) -- -- if (row == null || row.getRowKey() == null) -- throw new NullPointerException("row is null"); -- -- ArrayList<Triple> triples = new ArrayList<Triple>(); -- for (Column column : getColumns()) { -- Node value = row.getValue(column); -- triples.add(Triple.create(row.getRowKey(), column.getColumnKey(), value)); -- } -- return WrappedIterator.create(triples.iterator()); -- } -- -- @Override -- public Collection<Column> getColumns() { -- return columnList; -- } -- -- @Override -- public Column getColumn(Node p) { -- if (p == null) -- throw new NullPointerException("column node is null"); -- return columnIndex.get(p); -- } -- -- @Override -- public Column createColumn(Node p) { -- if (p == null) -- throw new NullPointerException("column node is null"); -- -- if (columnIndex.containsKey(p)) -- throw new IllegalArgumentException("column already exists: '" -- + p.toString()); -- -- columnIndex.put(p, new ColumnImpl(this, p)); -- columnList.add(columnIndex.get(p)); -- valueIndex.put(p, new HashMap<Node, Node>()); -- valueReverseIndex.put(p, HashMultimap.create()); -- return getColumn(p); -- } -- -- @Override -- public Row getRow(final Node s) { -- if (s == null) -- throw new NullPointerException("subject node is null"); -- Row row = rowIndex.get(s); -- return row; -- -- } -- -- @Override -- public Row createRow(final Node s){ -- Row row = this.getRow(s); -- if (row != null) -- return row; -- -- row = new InternalRow(s); -- rowIndex.put(s, row); -- rowList.add(row); -- -- return row; -- } -- -- @Override -- public List<Row> getAllRows() { -- return rowList; -- } -- -- -- -- @Override -- public List<Node> getColumnValues(Column column) { -- if (column == null || column.getColumnKey() == null) -- throw new NullPointerException("column is null"); -- -- Map<Node, Node> values = valueIndex.get(column.getColumnKey()); -- -- List<Node> list = new ArrayList<Node>(values.size()); -- list.addAll(values.values()); -- return list; -- } -- -- @Override -- public Collection<Row> getMatchingRows(Column column, Node value) { -- if (column == null || column.getColumnKey() == null) -- throw new NullPointerException("column is null"); -- -- if (value == null) -- throw new NullPointerException("value is null"); -- -- -- Node p = column.getColumnKey(); -- final SetMultimap<Node, Node> valueToSubjectMap = valueReverseIndex.get(p); -- if ( valueToSubjectMap == null ) -- return Collections.emptyList() ; -- final Set<Node> subjects = valueToSubjectMap.get(value); -- if ( subjects == null ) -- return Collections.emptyList() ; -- final ArrayList<Row> matchingRows = new ArrayList<Row>(); -- for (Node subject : subjects) { -- matchingRows.add(this.getRow(subject)); -- } -- return matchingRows; -- } -- -- private final void setX(final Node s, final Node p, final Node value) { -- if (p == null) -- throw new NullPointerException("column Node must not be null."); -- if (value == null) -- throw new NullPointerException("value must not be null."); -- -- Map<Node, Node> subjectToValueMap = valueIndex.get(p); -- if (!columnIndex.containsKey(p) || subjectToValueMap == null) -- throw new IllegalArgumentException("column: '" + p -- + "' does not yet exist."); -- -- Node oldValue = subjectToValueMap.get(s); -- subjectToValueMap.put(s, value); -- addToReverseMap(p, s, oldValue, value); -- } -- -- private void addToReverseMap(final Node p, final Node s, final Node oldValue, final Node value) { -- -- final SetMultimap<Node, Node> valueToSubjectMap = valueReverseIndex.get(p); -- if ( valueToSubjectMap == null ) -- return ; -- valueToSubjectMap.remove(oldValue, s); -- valueToSubjectMap.put(value, s); -- } -- -- private void unSetX(final Node s, final Node p) { -- -- final Map<Node, Node> subjectToValueMap = valueIndex.get(p); -- if (!columnIndex.containsKey(p) || subjectToValueMap == null) -- throw new IllegalArgumentException("column: '" + p -- + "' does not yet exist."); -- -- final Node value = subjectToValueMap.get(s); -- if (value == null) -- return; -- -- subjectToValueMap.remove(s); -- removeFromReverseMap(p, s, value); -- } -- -- private void removeFromReverseMap(final Node p, final Node s, -- final Node value) { -- final SetMultimap<Node, Node> valueTokeysMap = valueReverseIndex.get(p); -- if ( valueTokeysMap == null ) -- return ; -- valueTokeysMap.remove(s, value); -- } -- -- private Node getX(final Node s, final Node p) { -- final Map<Node, Node> subjectToValueMap = valueIndex.get(p); -- if (!columnIndex.containsKey(p) || subjectToValueMap == null) -- throw new IllegalArgumentException("column: '" + p -- + "' does not yet exist."); -- return subjectToValueMap.get(s); -- } -- -- private final class InternalRow implements Row { -- private final Node key; -- -- InternalRow(final Node key) { -- this.key = key; -- } -- -- @Override -- public void setValue(Column column, Node value) { -- if (value == null) -- unSetX(key, column.getColumnKey()); -- else -- setX(key, column.getColumnKey(), value); -- } -- -- @Override -- public Node getValue(Column column) { -- return getX(key, column.getColumnKey()); -- } -- -- @Override -- public Node getValue(Node columnKey) { -- return getX(key, columnKey); -- } -- -- @Override -- public PropertyTable getTable() { -- return PropertyTableHashMapImpl.this; -- } -- -- @Override -- public Node getRowKey() { -- return key; -- } -- -- @Override -- public Collection<Column> getColumns() { -- // TODO Auto-generated method stub -- return PropertyTableHashMapImpl.this.getColumns(); -- } -- -- @Override -- public ExtendedIterator<Triple> getTripleIterator() { -- ArrayList<Triple> triples = new ArrayList<Triple>(); -- for (Column column : getColumns()) { -- Node value = this.getValue(column); -- triples.add(Triple.create(key, column.getColumnKey(), value)); -- } -- return WrappedIterator.create(triples.iterator()); -- } -- -- } -- --} ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one ++ * or more contributor license agreements. See the NOTICE file ++ * distributed with this work for additional information ++ * regarding copyright ownership. The ASF licenses this file ++ * to you 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. ++ */ ++ ++package org.apache.jena.propertytable.impl; ++ ++import java.util.* ; ++import java.util.Map.Entry; ++ ++import org.apache.jena.atlas.iterator.Iter; ++import org.apache.jena.atlas.iterator.IteratorConcat; ++import org.apache.jena.ext.com.google.common.collect.HashMultimap; ++import org.apache.jena.ext.com.google.common.collect.SetMultimap ; ++import org.apache.jena.graph.Node ; ++import org.apache.jena.graph.Triple ; ++import org.apache.jena.propertytable.Column; ++import org.apache.jena.propertytable.PropertyTable; ++import org.apache.jena.propertytable.Row; ++import org.apache.jena.util.iterator.ExtendedIterator ; ++import org.apache.jena.util.iterator.NullIterator ; ++import org.apache.jena.util.iterator.WrappedIterator ; ++ ++/** ++ * A PropertyTable Implementation using HashMap. ++ * It contains PSO and POS indexes. ++ * ++ */ ++public class PropertyTableHashMapImpl implements PropertyTable { ++ ++ private Map<Node, Column> columnIndex; // Maps property Node key to Column ++ private List<Column> columnList; // Stores the list of columns in the table ++ private Map<Node, Row> rowIndex; // Maps the subject Node key to Row. ++ private List<Row> rowList; // Stores the list of rows in the table ++ ++ // PSO index ++ // Maps column Node to (subject Node, value) pairs ++ private Map<Node, Map<Node, Node>> valueIndex; ++ // POS index ++ // Maps column Node to (value, subject Node) pairs ++ private Map<Node, SetMultimap<Node, Node>> valueReverseIndex; ++ ++ PropertyTableHashMapImpl() { ++ columnIndex = new HashMap<Node, Column>(); ++ columnList = new ArrayList<Column>(); ++ rowIndex = new HashMap<Node, Row>(); ++ rowList = new ArrayList<Row>(); ++ valueIndex = new HashMap<Node, Map<Node, Node>>(); ++ valueReverseIndex = new HashMap<Node, SetMultimap<Node, Node>>(); ++ } ++ ++ @Override ++ public ExtendedIterator<Triple> getTripleIterator() { ++ ++ // use PSO index to scan all the table (slow) ++ IteratorConcat<Triple> iter = new IteratorConcat<Triple>(); ++ for (Column column : getColumns()) { ++ iter.add(getTripleIterator(column)); ++ } ++ return WrappedIterator.create(Iter.distinct(iter)); ++ } ++ ++ @Override ++ public ExtendedIterator<Triple> getTripleIterator(Column column) { ++ ++ // use PSO index directly (fast) ++ ++ if (column == null || column.getColumnKey() == null) ++ throw new NullPointerException("column is null"); ++ ++ ArrayList<Triple> triples = new ArrayList<Triple>(); ++ Map<Node, Node> values = valueIndex.get(column.getColumnKey()); ++ ++ for (Entry<Node, Node> entry : values.entrySet()) { ++ Node subject = entry.getKey(); ++ Node value = entry.getValue(); ++ triples.add(Triple.create(subject, column.getColumnKey(), value)); ++ } ++ return WrappedIterator.create(triples.iterator()); ++ } ++ ++ @Override ++ public ExtendedIterator<Triple> getTripleIterator(Node value) { ++ ++ // use POS index ( O(n), n= column count ) ++ ++ if (value == null) ++ throw new NullPointerException("value is null"); ++ ++ IteratorConcat<Triple> iter = new IteratorConcat<Triple>(); ++ for (Column column : this.getColumns()) { ++ ExtendedIterator<Triple> eIter = getTripleIterator(column,value); ++ iter.add(eIter); ++ } ++ return WrappedIterator.create(Iter.distinct(iter)); ++ } ++ ++ @Override ++ public ExtendedIterator<Triple> getTripleIterator(Column column, Node value) { ++ ++ // use POS index directly (fast) ++ ++ if (column == null || column.getColumnKey() == null) ++ throw new NullPointerException("column is null"); ++ ++ if (value == null) ++ throw new NullPointerException("value is null"); ++ ++ ++ Node p = column.getColumnKey(); ++ final SetMultimap<Node, Node> valueToSubjectMap = valueReverseIndex.get(p); ++ if ( valueToSubjectMap == null ) ++ return NullIterator.instance() ; ++ final Set<Node> subjects = valueToSubjectMap.get(value); ++ ArrayList<Triple> triples = new ArrayList<Triple>(); ++ for (Node subject : subjects) { ++ triples.add(Triple.create(subject, p, value)); ++ } ++ return WrappedIterator.create(triples.iterator()); ++ } ++ ++ ++ @Override ++ public ExtendedIterator<Triple> getTripleIterator(Row row) { ++ // use PSO index ( O(n), n= column count ) ++ ++ if (row == null || row.getRowKey() == null) ++ throw new NullPointerException("row is null"); ++ ++ ArrayList<Triple> triples = new ArrayList<Triple>(); ++ for (Column column : getColumns()) { ++ Node value = row.getValue(column); ++ triples.add(Triple.create(row.getRowKey(), column.getColumnKey(), value)); ++ } ++ return WrappedIterator.create(triples.iterator()); ++ } ++ ++ @Override ++ public Collection<Column> getColumns() { ++ return columnList; ++ } ++ ++ @Override ++ public Column getColumn(Node p) { ++ if (p == null) ++ throw new NullPointerException("column node is null"); ++ return columnIndex.get(p); ++ } ++ ++ @Override ++ public Column createColumn(Node p) { ++ if (p == null) ++ throw new NullPointerException("column node is null"); ++ ++ if (columnIndex.containsKey(p)) ++ throw new IllegalArgumentException("column already exists: '" ++ + p.toString()); ++ ++ columnIndex.put(p, new ColumnImpl(this, p)); ++ columnList.add(columnIndex.get(p)); ++ valueIndex.put(p, new HashMap<Node, Node>()); ++ valueReverseIndex.put(p, HashMultimap.create()); ++ return getColumn(p); ++ } ++ ++ @Override ++ public Row getRow(final Node s) { ++ if (s == null) ++ throw new NullPointerException("subject node is null"); ++ Row row = rowIndex.get(s); ++ return row; ++ ++ } ++ ++ @Override ++ public Row createRow(final Node s){ ++ Row row = this.getRow(s); ++ if (row != null) ++ return row; ++ ++ row = new InternalRow(s); ++ rowIndex.put(s, row); ++ rowList.add(row); ++ ++ return row; ++ } ++ ++ @Override ++ public List<Row> getAllRows() { ++ return rowList; ++ } ++ ++ ++ ++ @Override ++ public List<Node> getColumnValues(Column column) { ++ if (column == null || column.getColumnKey() == null) ++ throw new NullPointerException("column is null"); ++ ++ Map<Node, Node> values = valueIndex.get(column.getColumnKey()); ++ ++ List<Node> list = new ArrayList<Node>(values.size()); ++ list.addAll(values.values()); ++ return list; ++ } ++ ++ @Override ++ public Collection<Row> getMatchingRows(Column column, Node value) { ++ if (column == null || column.getColumnKey() == null) ++ throw new NullPointerException("column is null"); ++ ++ if (value == null) ++ throw new NullPointerException("value is null"); ++ ++ ++ Node p = column.getColumnKey(); ++ final SetMultimap<Node, Node> valueToSubjectMap = valueReverseIndex.get(p); ++ if ( valueToSubjectMap == null ) ++ return Collections.emptyList() ; ++ final Set<Node> subjects = valueToSubjectMap.get(value); ++ if ( subjects == null ) ++ return Collections.emptyList() ; ++ final ArrayList<Row> matchingRows = new ArrayList<Row>(); ++ for (Node subject : subjects) { ++ matchingRows.add(this.getRow(subject)); ++ } ++ return matchingRows; ++ } ++ ++ private final void setX(final Node s, final Node p, final Node value) { ++ if (p == null) ++ throw new NullPointerException("column Node must not be null."); ++ if (value == null) ++ throw new NullPointerException("value must not be null."); ++ ++ Map<Node, Node> subjectToValueMap = valueIndex.get(p); ++ if (!columnIndex.containsKey(p) || subjectToValueMap == null) ++ throw new IllegalArgumentException("column: '" + p ++ + "' does not yet exist."); ++ ++ Node oldValue = subjectToValueMap.get(s); ++ subjectToValueMap.put(s, value); ++ addToReverseMap(p, s, oldValue, value); ++ } ++ ++ private void addToReverseMap(final Node p, final Node s, final Node oldValue, final Node value) { ++ ++ final SetMultimap<Node, Node> valueToSubjectMap = valueReverseIndex.get(p); ++ if ( valueToSubjectMap == null ) ++ return ; ++ valueToSubjectMap.remove(oldValue, s); ++ valueToSubjectMap.put(value, s); ++ } ++ ++ private void unSetX(final Node s, final Node p) { ++ ++ final Map<Node, Node> subjectToValueMap = valueIndex.get(p); ++ if (!columnIndex.containsKey(p) || subjectToValueMap == null) ++ throw new IllegalArgumentException("column: '" + p ++ + "' does not yet exist."); ++ ++ final Node value = subjectToValueMap.get(s); ++ if (value == null) ++ return; ++ ++ subjectToValueMap.remove(s); ++ removeFromReverseMap(p, s, value); ++ } ++ ++ private void removeFromReverseMap(final Node p, final Node s, ++ final Node value) { ++ final SetMultimap<Node, Node> valueTokeysMap = valueReverseIndex.get(p); ++ if ( valueTokeysMap == null ) ++ return ; ++ valueTokeysMap.remove(s, value); ++ } ++ ++ private Node getX(final Node s, final Node p) { ++ final Map<Node, Node> subjectToValueMap = valueIndex.get(p); ++ if (!columnIndex.containsKey(p) || subjectToValueMap == null) ++ throw new IllegalArgumentException("column: '" + p ++ + "' does not yet exist."); ++ return subjectToValueMap.get(s); ++ } ++ ++ private final class InternalRow implements Row { ++ private final Node key; ++ ++ InternalRow(final Node key) { ++ this.key = key; ++ } ++ ++ @Override ++ public void setValue(Column column, Node value) { ++ if (value == null) ++ unSetX(key, column.getColumnKey()); ++ else ++ setX(key, column.getColumnKey(), value); ++ } ++ ++ @Override ++ public Node getValue(Column column) { ++ return getX(key, column.getColumnKey()); ++ } ++ ++ @Override ++ public Node getValue(Node columnKey) { ++ return getX(key, columnKey); ++ } ++ ++ @Override ++ public PropertyTable getTable() { ++ return PropertyTableHashMapImpl.this; ++ } ++ ++ @Override ++ public Node getRowKey() { ++ return key; ++ } ++ ++ @Override ++ public Collection<Column> getColumns() { ++ // TODO Auto-generated method stub ++ return PropertyTableHashMapImpl.this.getColumns(); ++ } ++ ++ @Override ++ public ExtendedIterator<Triple> getTripleIterator() { ++ ArrayList<Triple> triples = new ArrayList<Triple>(); ++ for (Column column : getColumns()) { ++ Node value = this.getValue(column); ++ triples.add(Triple.create(key, column.getColumnKey(), value)); ++ } ++ return WrappedIterator.create(triples.iterator()); ++ } ++ ++ } ++ ++} http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-csv/src/main/java/org/apache/jena/propertytable/lang/LangCSV.java ---------------------------------------------------------------------- diff --cc jena-csv/src/main/java/org/apache/jena/propertytable/lang/LangCSV.java index bd2ff29,bd2ff29..d816f46 --- a/jena-csv/src/main/java/org/apache/jena/propertytable/lang/LangCSV.java +++ b/jena-csv/src/main/java/org/apache/jena/propertytable/lang/LangCSV.java @@@ -1,154 -1,154 +1,154 @@@ --/** -- * Licensed to the Apache Software Foundation (ASF) under one -- * or more contributor license agreements. See the NOTICE file -- * distributed with this work for additional information -- * regarding copyright ownership. The ASF licenses this file -- * to you 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. -- */ -- --package org.apache.jena.propertytable.lang; -- --import java.io.InputStream ; --import java.io.Reader ; --import java.util.ArrayList ; --import java.util.List ; -- --import org.apache.jena.atlas.csv.CSVParser ; --import org.apache.jena.atlas.lib.IRILib ; --import org.apache.jena.datatypes.xsd.XSDDatatype ; --import org.apache.jena.graph.Node ; --import org.apache.jena.graph.NodeFactory ; --import org.apache.jena.riot.Lang ; --import org.apache.jena.riot.RDFLanguages ; --import org.apache.jena.riot.lang.LangRIOT ; --import org.apache.jena.riot.system.* ; -- --/** -- * The LangRIOT implementation for CSV -- * -- */ --public class LangCSV implements LangRIOT { -- -- /** @deprecated Use {@linkplain CSV2RDF#init} */ -- @Deprecated -- public static void register() { CSV2RDF.init() ; } -- -- public static final String CSV_PREFIX = "http://w3c/future-csv-vocab/"; -- public static final String CSV_ROW = CSV_PREFIX + "row"; -- -- private InputStream input = null; -- private Reader reader = null; -- private String base; -- private String filename; -- private StreamRDF sink; -- private ParserProfile profile; // Warning - we don't use all of this. -- -- @Override -- public Lang getLang() { -- return RDFLanguages.CSV; -- } -- -- @Override -- public ParserProfile getProfile() { -- return profile; -- } -- -- @Override -- public void setProfile(ParserProfile profile) { -- this.profile = profile; -- } -- -- public LangCSV(Reader reader, String base, String filename, ErrorHandler errorHandler, StreamRDF sink) { -- this.reader = reader; -- this.base = base; -- this.filename = filename; -- this.sink = sink; -- this.profile = RiotLib.profile(getLang(), base, errorHandler); -- } -- -- public LangCSV(InputStream in, String base, String filename, ErrorHandler errorHandler, StreamRDF sink) { -- this.input = in; -- this.base = base; -- this.filename = filename; -- this.sink = sink; -- this.profile = RiotLib.profile(getLang(), base, errorHandler); -- } -- -- @Override -- public void parse() { -- sink.start(); -- CSVParser parser = (input != null) ? CSVParser.create(input) : CSVParser.create(reader); -- List<String> row = null; -- ArrayList<Node> predicates = new ArrayList<Node>(); -- int rowNum = 0; -- while ((row = parser.parse1()) != null) { -- -- if (rowNum == 0) { -- for (String column : row) { -- String uri = IRIResolver.resolveString(filename) + "#" -- + toSafeLocalname(column); -- Node predicate = this.profile.createURI(uri, rowNum, 0); -- predicates.add(predicate); -- } -- } else { -- //Node subject = this.profile.createBlankNode(null, -1, -1); -- Node subject = caculateSubject(rowNum, filename); -- Node predicateRow = this.profile.createURI(CSV_ROW, -1, -1); -- Node objectRow = this.profile -- .createTypedLiteral((rowNum + ""), -- XSDDatatype.XSDinteger, rowNum, 0); -- sink.triple(this.profile.createTriple(subject, predicateRow, -- objectRow, rowNum, 0)); -- for (int col = 0; col < row.size() && col<predicates.size(); col++) { -- Node predicate = predicates.get(col); -- String columnValue = row.get(col).trim(); -- if("".equals(columnValue)){ -- continue; -- } -- Node o; -- try { -- // Try for a double. -- double d = Double.parseDouble(columnValue); -- o = NodeFactory.createLiteral(columnValue, -- XSDDatatype.XSDdouble); -- } catch (Exception e) { -- o = NodeFactory.createLiteral(columnValue); -- } -- sink.triple(this.profile.createTriple(subject, predicate, -- o, rowNum, col)); -- } -- -- } -- rowNum++; -- } -- sink.finish(); -- -- } -- -- public static String toSafeLocalname(String raw) { -- String ret = raw.trim(); -- return encodeURIComponent(ret); -- -- } -- -- public static String encodeURIComponent(String s) { -- return IRILib.encodeUriComponent(s); -- } -- -- public static Node caculateSubject(int rowNum, String filename){ -- Node subject = NodeFactory.createBlankNode(); --// String uri = IRIResolver.resolveString(filename) + "#Row_" + rowNum; --// Node subject = NodeFactory.createURI(uri); -- return subject; -- } --} ++/** ++ * Licensed to the Apache Software Foundation (ASF) under one ++ * or more contributor license agreements. See the NOTICE file ++ * distributed with this work for additional information ++ * regarding copyright ownership. The ASF licenses this file ++ * to you 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. ++ */ ++ ++package org.apache.jena.propertytable.lang; ++ ++import java.io.InputStream ; ++import java.io.Reader ; ++import java.util.ArrayList ; ++import java.util.List ; ++ ++import org.apache.jena.atlas.csv.CSVParser ; ++import org.apache.jena.atlas.lib.IRILib ; ++import org.apache.jena.datatypes.xsd.XSDDatatype ; ++import org.apache.jena.graph.Node ; ++import org.apache.jena.graph.NodeFactory ; ++import org.apache.jena.riot.Lang ; ++import org.apache.jena.riot.RDFLanguages ; ++import org.apache.jena.riot.lang.LangRIOT ; ++import org.apache.jena.riot.system.* ; ++ ++/** ++ * The LangRIOT implementation for CSV ++ * ++ */ ++public class LangCSV implements LangRIOT { ++ ++ /** @deprecated Use {@linkplain CSV2RDF#init} */ ++ @Deprecated ++ public static void register() { CSV2RDF.init() ; } ++ ++ public static final String CSV_PREFIX = "http://w3c/future-csv-vocab/"; ++ public static final String CSV_ROW = CSV_PREFIX + "row"; ++ ++ private InputStream input = null; ++ private Reader reader = null; ++ private String base; ++ private String filename; ++ private StreamRDF sink; ++ private ParserProfile profile; // Warning - we don't use all of this. ++ ++ @Override ++ public Lang getLang() { ++ return RDFLanguages.CSV; ++ } ++ ++ @Override ++ public ParserProfile getProfile() { ++ return profile; ++ } ++ ++ @Override ++ public void setProfile(ParserProfile profile) { ++ this.profile = profile; ++ } ++ ++ public LangCSV(Reader reader, String base, String filename, ErrorHandler errorHandler, StreamRDF sink) { ++ this.reader = reader; ++ this.base = base; ++ this.filename = filename; ++ this.sink = sink; ++ this.profile = RiotLib.profile(getLang(), base, errorHandler); ++ } ++ ++ public LangCSV(InputStream in, String base, String filename, ErrorHandler errorHandler, StreamRDF sink) { ++ this.input = in; ++ this.base = base; ++ this.filename = filename; ++ this.sink = sink; ++ this.profile = RiotLib.profile(getLang(), base, errorHandler); ++ } ++ ++ @Override ++ public void parse() { ++ sink.start(); ++ CSVParser parser = (input != null) ? CSVParser.create(input) : CSVParser.create(reader); ++ List<String> row = null; ++ ArrayList<Node> predicates = new ArrayList<Node>(); ++ int rowNum = 0; ++ while ((row = parser.parse1()) != null) { ++ ++ if (rowNum == 0) { ++ for (String column : row) { ++ String uri = IRIResolver.resolveString(filename) + "#" ++ + toSafeLocalname(column); ++ Node predicate = this.profile.createURI(uri, rowNum, 0); ++ predicates.add(predicate); ++ } ++ } else { ++ //Node subject = this.profile.createBlankNode(null, -1, -1); ++ Node subject = caculateSubject(rowNum, filename); ++ Node predicateRow = this.profile.createURI(CSV_ROW, -1, -1); ++ Node objectRow = this.profile ++ .createTypedLiteral((rowNum + ""), ++ XSDDatatype.XSDinteger, rowNum, 0); ++ sink.triple(this.profile.createTriple(subject, predicateRow, ++ objectRow, rowNum, 0)); ++ for (int col = 0; col < row.size() && col<predicates.size(); col++) { ++ Node predicate = predicates.get(col); ++ String columnValue = row.get(col).trim(); ++ if("".equals(columnValue)){ ++ continue; ++ } ++ Node o; ++ try { ++ // Try for a double. ++ double d = Double.parseDouble(columnValue); ++ o = NodeFactory.createLiteral(columnValue, ++ XSDDatatype.XSDdouble); ++ } catch (Exception e) { ++ o = NodeFactory.createLiteral(columnValue); ++ } ++ sink.triple(this.profile.createTriple(subject, predicate, ++ o, rowNum, col)); ++ } ++ ++ } ++ rowNum++; ++ } ++ sink.finish(); ++ ++ } ++ ++ public static String toSafeLocalname(String raw) { ++ String ret = raw.trim(); ++ return encodeURIComponent(ret); ++ ++ } ++ ++ public static String encodeURIComponent(String s) { ++ return IRILib.encodeUriComponent(s); ++ } ++ ++ public static Node caculateSubject(int rowNum, String filename){ ++ Node subject = NodeFactory.createBlankNode(); ++// String uri = IRIResolver.resolveString(filename) + "#Row_" + rowNum; ++// Node subject = NodeFactory.createURI(uri); ++ return subject; ++ } ++} http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-csv/src/main/java/riotcmdx/csv2rdf.java ---------------------------------------------------------------------- diff --cc jena-csv/src/main/java/riotcmdx/csv2rdf.java index eda3d8a,eda3d8a..cd8929d --- a/jena-csv/src/main/java/riotcmdx/csv2rdf.java +++ b/jena-csv/src/main/java/riotcmdx/csv2rdf.java @@@ -1,52 -1,52 +1,52 @@@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one -- * or more contributor license agreements. See the NOTICE file -- * distributed with this work for additional information -- * regarding copyright ownership. The ASF licenses this file -- * to you 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. -- */ -- --package riotcmdx; -- --import org.apache.jena.atlas.lib.Lib ; --import org.apache.jena.atlas.web.ContentType ; --import org.apache.jena.riot.Lang ; --import org.apache.jena.riot.RDFLanguages ; --import riotcmd.CmdLangParse ; -- --/** -- * A command line tool for direct and scalable transforming from CSV to the formatted RDF syntax (i.e. N-Triples), -- * with no intermediary Graph or PropertyTable. -- */ --public class csv2rdf extends CmdLangParse{ -- -- public static void main(String... argv) -- { -- new csv2rdf(argv).mainRun() ; -- } -- -- protected csv2rdf(String[] argv) -- { -- super(argv) ; -- } -- -- @Override -- protected Lang selectLang(String filename, ContentType contentType, Lang dftLang) { -- return RDFLanguages.CSV; -- } -- -- @Override -- protected String getCommandName() { -- return Lib.classShortName(csv2rdf.class) ; -- } --} ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one ++ * or more contributor license agreements. See the NOTICE file ++ * distributed with this work for additional information ++ * regarding copyright ownership. The ASF licenses this file ++ * to you 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. ++ */ ++ ++package riotcmdx; ++ ++import org.apache.jena.atlas.lib.Lib ; ++import org.apache.jena.atlas.web.ContentType ; ++import org.apache.jena.riot.Lang ; ++import org.apache.jena.riot.RDFLanguages ; ++import riotcmd.CmdLangParse ; ++ ++/** ++ * A command line tool for direct and scalable transforming from CSV to the formatted RDF syntax (i.e. N-Triples), ++ * with no intermediary Graph or PropertyTable. ++ */ ++public class csv2rdf extends CmdLangParse{ ++ ++ public static void main(String... argv) ++ { ++ new csv2rdf(argv).mainRun() ; ++ } ++ ++ protected csv2rdf(String[] argv) ++ { ++ super(argv) ; ++ } ++ ++ @Override ++ protected Lang selectLang(String filename, ContentType contentType, Lang dftLang) { ++ return RDFLanguages.CSV; ++ } ++ ++ @Override ++ protected String getCommandName() { ++ return Lib.classShortName(csv2rdf.class) ; ++ } ++} http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-csv/src/test/java/org/apache/jena/propertytable/AbstractColumnTest.java ---------------------------------------------------------------------- diff --cc jena-csv/src/test/java/org/apache/jena/propertytable/AbstractColumnTest.java index a41161e,a41161e..fed4517 --- a/jena-csv/src/test/java/org/apache/jena/propertytable/AbstractColumnTest.java +++ b/jena-csv/src/test/java/org/apache/jena/propertytable/AbstractColumnTest.java @@@ -1,79 -1,79 +1,79 @@@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one -- * or more contributor license agreements. See the NOTICE file -- * distributed with this work for additional information -- * regarding copyright ownership. The ASF licenses this file -- * to you 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. -- */ -- --package org.apache.jena.propertytable; -- --import java.util.List; -- --import org.apache.jena.graph.Node ; --import org.apache.jena.graph.NodeFactory ; --import org.junit.Assert; --import org.junit.Test; -- --/** -- * Tests related to Column. -- * -- */ --public abstract class AbstractColumnTest extends BaseTest{ -- -- -- @Test(expected = NullPointerException.class) -- public void testCreateColumnWithArgNull() { -- table.createColumn(null); -- } -- -- @Test(expected = IllegalArgumentException.class) -- public void testCreateListColumnWithAlreadyExistingCoulmnName() { -- table.createColumn(URI("something")); -- table.createColumn(URI("something")); -- } -- -- @Test -- public void testColumnCreate() { -- table.createColumn(URI("something")); -- Assert.assertEquals(1, table.getColumns().size()); -- Assert.assertTrue(collectionContains(table.getColumns(), URI("something"))); -- } -- -- @Test -- public void testGetColumnValues() { -- Column something = table.createColumn(URI("something")); -- final Row row1 = table.createRow(NodeFactory.createBlankNode()); -- row1.setValue(something, URI("apple")); -- final Row row2 = table.createRow(NodeFactory.createBlankNode()); -- row2.setValue(something, URI("orange")); -- final List<Node> values = something.getValues(); -- Assert.assertTrue(values.size() == 2); -- Assert.assertTrue(values.contains( URI("apple"))); -- Assert.assertTrue(values.contains( URI("orange"))); -- } -- -- @Test -- public void testGetColumn() { -- table.createColumn(URI("something")); -- Assert.assertNotNull(table.getColumn(URI("something"))); -- Assert.assertNull(table.getColumn( URI("nonExistentColumnName"))); -- } -- -- @Test -- public void testGetTable() { -- Column something = table.createColumn(URI("something")); -- Assert.assertEquals(table, something.getTable()); -- } -- --} ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one ++ * or more contributor license agreements. See the NOTICE file ++ * distributed with this work for additional information ++ * regarding copyright ownership. The ASF licenses this file ++ * to you 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. ++ */ ++ ++package org.apache.jena.propertytable; ++ ++import java.util.List; ++ ++import org.apache.jena.graph.Node ; ++import org.apache.jena.graph.NodeFactory ; ++import org.junit.Assert; ++import org.junit.Test; ++ ++/** ++ * Tests related to Column. ++ * ++ */ ++public abstract class AbstractColumnTest extends BaseTest{ ++ ++ ++ @Test(expected = NullPointerException.class) ++ public void testCreateColumnWithArgNull() { ++ table.createColumn(null); ++ } ++ ++ @Test(expected = IllegalArgumentException.class) ++ public void testCreateListColumnWithAlreadyExistingCoulmnName() { ++ table.createColumn(URI("something")); ++ table.createColumn(URI("something")); ++ } ++ ++ @Test ++ public void testColumnCreate() { ++ table.createColumn(URI("something")); ++ Assert.assertEquals(1, table.getColumns().size()); ++ Assert.assertTrue(collectionContains(table.getColumns(), URI("something"))); ++ } ++ ++ @Test ++ public void testGetColumnValues() { ++ Column something = table.createColumn(URI("something")); ++ final Row row1 = table.createRow(NodeFactory.createBlankNode()); ++ row1.setValue(something, URI("apple")); ++ final Row row2 = table.createRow(NodeFactory.createBlankNode()); ++ row2.setValue(something, URI("orange")); ++ final List<Node> values = something.getValues(); ++ Assert.assertTrue(values.size() == 2); ++ Assert.assertTrue(values.contains( URI("apple"))); ++ Assert.assertTrue(values.contains( URI("orange"))); ++ } ++ ++ @Test ++ public void testGetColumn() { ++ table.createColumn(URI("something")); ++ Assert.assertNotNull(table.getColumn(URI("something"))); ++ Assert.assertNull(table.getColumn( URI("nonExistentColumnName"))); ++ } ++ ++ @Test ++ public void testGetTable() { ++ Column something = table.createColumn(URI("something")); ++ Assert.assertEquals(table, something.getTable()); ++ } ++ ++} http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-csv/src/test/java/org/apache/jena/propertytable/AbstractPropertyTableTest.java ---------------------------------------------------------------------- diff --cc jena-csv/src/test/java/org/apache/jena/propertytable/AbstractPropertyTableTest.java index 5209361,5209361..a9544f9 --- a/jena-csv/src/test/java/org/apache/jena/propertytable/AbstractPropertyTableTest.java +++ b/jena-csv/src/test/java/org/apache/jena/propertytable/AbstractPropertyTableTest.java @@@ -1,56 -1,56 +1,56 @@@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one -- * or more contributor license agreements. See the NOTICE file -- * distributed with this work for additional information -- * regarding copyright ownership. The ASF licenses this file -- * to you 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. -- */ -- --package org.apache.jena.propertytable; -- --import java.util.Collection; -- --import org.apache.jena.graph.NodeFactory ; --import org.junit.Assert; --import org.junit.Test; -- --/** -- * Tests related to PropertyTable. -- * -- */ --public abstract class AbstractPropertyTableTest extends AbstractRowTest{ -- -- @Test -- public void testGetMatchingColumns() { -- Column something = table.createColumn(URI("something") ); -- final Row row1 = table.createRow(NodeFactory.createBlankNode()); -- row1.setValue(something, URI("apple")); -- final Row row2 = table.createRow(NodeFactory.createBlankNode()); -- row2.setValue(something, URI("orange")); -- Collection<Row> matchingRows = table.getMatchingRows(something, URI("apple")); -- Assert.assertTrue(matchingRows.size() == 1); -- matchingRows = table.getMatchingRows(something, URI("banana")); -- Assert.assertTrue(matchingRows.isEmpty()); -- } -- -- @Test -- public void testGetAllRows() { -- Assert.assertTrue(table.getAllRows().size() == 1); -- table.createRow(NodeFactory.createBlankNode()); -- Assert.assertTrue(table.getAllRows().size() == 2); -- table.createRow(NodeFactory.createBlankNode()); -- Assert.assertTrue(table.getAllRows().size() == 3); -- } -- -- --} ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one ++ * or more contributor license agreements. See the NOTICE file ++ * distributed with this work for additional information ++ * regarding copyright ownership. The ASF licenses this file ++ * to you 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. ++ */ ++ ++package org.apache.jena.propertytable; ++ ++import java.util.Collection; ++ ++import org.apache.jena.graph.NodeFactory ; ++import org.junit.Assert; ++import org.junit.Test; ++ ++/** ++ * Tests related to PropertyTable. ++ * ++ */ ++public abstract class AbstractPropertyTableTest extends AbstractRowTest{ ++ ++ @Test ++ public void testGetMatchingColumns() { ++ Column something = table.createColumn(URI("something") ); ++ final Row row1 = table.createRow(NodeFactory.createBlankNode()); ++ row1.setValue(something, URI("apple")); ++ final Row row2 = table.createRow(NodeFactory.createBlankNode()); ++ row2.setValue(something, URI("orange")); ++ Collection<Row> matchingRows = table.getMatchingRows(something, URI("apple")); ++ Assert.assertTrue(matchingRows.size() == 1); ++ matchingRows = table.getMatchingRows(something, URI("banana")); ++ Assert.assertTrue(matchingRows.isEmpty()); ++ } ++ ++ @Test ++ public void testGetAllRows() { ++ Assert.assertTrue(table.getAllRows().size() == 1); ++ table.createRow(NodeFactory.createBlankNode()); ++ Assert.assertTrue(table.getAllRows().size() == 2); ++ table.createRow(NodeFactory.createBlankNode()); ++ Assert.assertTrue(table.getAllRows().size() == 3); ++ } ++ ++ ++}
