http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-csv/src/main/java/org/apache/jena/propertytable/impl/ColumnImpl.java ---------------------------------------------------------------------- diff --git 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 index ce456f9..808441a 100644 --- 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 @@ -/* - * 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/3d70d735/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableArrayImpl.java ---------------------------------------------------------------------- diff --git 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 index 1920045..6b8bd6e 100644 --- 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 @@ -/* - * 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/3d70d735/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableBuilder.java ---------------------------------------------------------------------- diff --git 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 index a0c5af1..0532dc9 100644 --- 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 @@ -/* - * 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/3d70d735/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableHashMapImpl.java ---------------------------------------------------------------------- diff --git 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 index 45ec40f..622b3f1 100644 --- 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 @@ -/* - * 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/3d70d735/jena-csv/src/main/java/org/apache/jena/propertytable/lang/LangCSV.java ---------------------------------------------------------------------- diff --git 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 index d816f46..bd2ff29 100644 --- 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 @@ -/** - * 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/3d70d735/jena-csv/src/main/java/riotcmdx/csv2rdf.java ---------------------------------------------------------------------- diff --git a/jena-csv/src/main/java/riotcmdx/csv2rdf.java b/jena-csv/src/main/java/riotcmdx/csv2rdf.java index cd8929d..eda3d8a 100644 --- a/jena-csv/src/main/java/riotcmdx/csv2rdf.java +++ b/jena-csv/src/main/java/riotcmdx/csv2rdf.java @@ -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/3d70d735/jena-csv/src/test/java/org/apache/jena/propertytable/AbstractColumnTest.java ---------------------------------------------------------------------- diff --git a/jena-csv/src/test/java/org/apache/jena/propertytable/AbstractColumnTest.java b/jena-csv/src/test/java/org/apache/jena/propertytable/AbstractColumnTest.java index fed4517..a41161e 100644 --- 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 @@ -/* - * 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/3d70d735/jena-csv/src/test/java/org/apache/jena/propertytable/AbstractPropertyTableTest.java ---------------------------------------------------------------------- diff --git a/jena-csv/src/test/java/org/apache/jena/propertytable/AbstractPropertyTableTest.java b/jena-csv/src/test/java/org/apache/jena/propertytable/AbstractPropertyTableTest.java index a9544f9..5209361 100644 --- 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 @@ -/* - * 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); + } + + +}
