mirror of
https://github.com/apache/poi.git
synced 2025-02-22 10:06:37 +00:00
replace CombinedIterable with a few lines of simple code
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1890135 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
a019fbf46b
commit
1bb995ec16
@ -17,6 +17,8 @@
|
||||
|
||||
package org.apache.poi.xdgf.usermodel;
|
||||
|
||||
import static org.apache.poi.xdgf.usermodel.section.GeometrySection.combineGeometries;
|
||||
|
||||
import java.awt.BasicStroke;
|
||||
import java.awt.Color;
|
||||
import java.awt.Stroke;
|
||||
@ -33,7 +35,6 @@ import com.microsoft.schemas.office.visio.x2012.main.TextType;
|
||||
import org.apache.poi.ooxml.POIXMLException;
|
||||
import org.apache.poi.util.Internal;
|
||||
import org.apache.poi.xdgf.exceptions.XDGFException;
|
||||
import org.apache.poi.xdgf.usermodel.section.CombinedIterable;
|
||||
import org.apache.poi.xdgf.usermodel.section.GeometrySection;
|
||||
import org.apache.poi.xdgf.usermodel.section.XDGFSection;
|
||||
import org.apache.poi.xdgf.usermodel.shape.ShapeVisitor;
|
||||
@ -832,8 +833,7 @@ public class XDGFShape extends XDGFSheet {
|
||||
//
|
||||
|
||||
public Iterable<GeometrySection> getGeometrySections() {
|
||||
return new CombinedIterable<>(_geometry,
|
||||
_masterShape != null ? _masterShape._geometry : null);
|
||||
return combineGeometries(_geometry, _masterShape != null ? _masterShape._geometry : null);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,135 +0,0 @@
|
||||
/* ====================================================================
|
||||
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.poi.xdgf.usermodel.section;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.SortedMap;
|
||||
|
||||
/**
|
||||
* An iterator used to iterate over the base and master items
|
||||
*/
|
||||
public class CombinedIterable<T> implements Iterable<T> {
|
||||
|
||||
final SortedMap<Long, T> _baseItems;
|
||||
final SortedMap<Long, T> _masterItems;
|
||||
|
||||
public CombinedIterable(SortedMap<Long, T> baseItems,
|
||||
SortedMap<Long, T> masterItems) {
|
||||
_baseItems = baseItems;
|
||||
_masterItems = masterItems;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<T> iterator() {
|
||||
|
||||
final Iterator<Entry<Long, T>> vmasterI = (_masterItems == null)
|
||||
? Collections.emptyIterator() : _masterItems.entrySet().iterator();
|
||||
|
||||
return new Iterator<T>() {
|
||||
|
||||
Long lastI = Long.MIN_VALUE;
|
||||
|
||||
Entry<Long, T> currentBase;
|
||||
Entry<Long, T> currentMaster;
|
||||
|
||||
// grab the iterator for both
|
||||
final Iterator<Entry<Long, T>> baseI = _baseItems.entrySet().iterator();
|
||||
final Iterator<Entry<Long, T>> masterI = vmasterI;
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return currentBase != null || currentMaster != null
|
||||
|| baseI.hasNext() || masterI.hasNext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T next() {
|
||||
|
||||
// TODO: This seems far more complex than it needs to be
|
||||
|
||||
long baseIdx = Long.MAX_VALUE;
|
||||
long masterIdx = Long.MAX_VALUE;
|
||||
|
||||
if (currentBase == null) {
|
||||
while (baseI.hasNext()) {
|
||||
currentBase = baseI.next();
|
||||
if (currentBase.getKey() > lastI) {
|
||||
baseIdx = currentBase.getKey();
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
baseIdx = currentBase.getKey();
|
||||
}
|
||||
|
||||
if (currentMaster == null) {
|
||||
while (masterI.hasNext()) {
|
||||
currentMaster = masterI.next();
|
||||
if (currentMaster.getKey() > lastI) {
|
||||
masterIdx = currentMaster.getKey();
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
masterIdx = currentMaster.getKey();
|
||||
}
|
||||
|
||||
T val;
|
||||
|
||||
if (currentBase != null) {
|
||||
|
||||
if (baseIdx <= masterIdx) {
|
||||
lastI = baseIdx;
|
||||
val = currentBase.getValue();
|
||||
|
||||
// discard master if same as base
|
||||
if (masterIdx == baseIdx) {
|
||||
currentMaster = null;
|
||||
}
|
||||
|
||||
currentBase = null;
|
||||
|
||||
} else {
|
||||
lastI = masterIdx;
|
||||
val = (currentMaster != null) ? currentMaster.getValue() : null;
|
||||
currentMaster = null;
|
||||
}
|
||||
|
||||
} else if (currentMaster != null) {
|
||||
lastI = currentMaster.getKey();
|
||||
val = currentMaster.getValue();
|
||||
|
||||
currentMaster = null;
|
||||
} else {
|
||||
throw new NoSuchElementException();
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
@ -18,6 +18,7 @@
|
||||
package org.apache.poi.xdgf.usermodel.section;
|
||||
|
||||
import java.awt.geom.Path2D;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.SortedMap;
|
||||
@ -26,6 +27,7 @@ import java.util.TreeMap;
|
||||
import com.microsoft.schemas.office.visio.x2012.main.RowType;
|
||||
import com.microsoft.schemas.office.visio.x2012.main.SectionType;
|
||||
import org.apache.poi.ooxml.POIXMLException;
|
||||
import org.apache.poi.util.Internal;
|
||||
import org.apache.poi.xdgf.geom.SplineCollector;
|
||||
import org.apache.poi.xdgf.usermodel.XDGFCell;
|
||||
import org.apache.poi.xdgf.usermodel.XDGFShape;
|
||||
@ -86,9 +88,20 @@ public class GeometrySection extends XDGFSection {
|
||||
return noShow;
|
||||
}
|
||||
|
||||
@Internal
|
||||
public static <T,S extends SortedMap<Long,T>> Collection<T> combineGeometries(S map1, S map2) {
|
||||
SortedMap<Long,T> map;
|
||||
if (map2 == null) {
|
||||
map = map1;
|
||||
} else {
|
||||
map = new TreeMap<>(map2);
|
||||
map.putAll(map1);
|
||||
}
|
||||
return map.values();
|
||||
}
|
||||
|
||||
public Iterable<GeometryRow> getCombinedRows() {
|
||||
return new CombinedIterable<>(_rows,
|
||||
_master == null ? null : _master._rows);
|
||||
return combineGeometries(_rows, _master == null ? null : _master._rows);
|
||||
}
|
||||
|
||||
public Path2D.Double getPath(XDGFShape parent) {
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
package org.apache.poi.xdgf.usermodel.section;
|
||||
|
||||
import static org.apache.poi.xdgf.usermodel.section.GeometrySection.combineGeometries;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
@ -49,7 +50,7 @@ class TestCombinedIterator {
|
||||
base.put(2L, "B2");
|
||||
base.put(3L, "B3");
|
||||
|
||||
testIteration(createIter(base, null), "B1", "B2", "B3");
|
||||
testIteration(combineGeometries(base, null), "B1", "B2", "B3");
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -65,7 +66,7 @@ class TestCombinedIterator {
|
||||
master.put(5L, "M5");
|
||||
master.put(6L, "M6");
|
||||
|
||||
testIteration(createIter(base, master), "B1", "B2", "B3", "M4", "M5", "M6");
|
||||
testIteration(combineGeometries(base, master), "B1", "B2", "B3", "M4", "M5", "M6");
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -81,7 +82,7 @@ class TestCombinedIterator {
|
||||
master.put(2L, "M2");
|
||||
master.put(3L, "M3");
|
||||
|
||||
testIteration(createIter(base, master), "M1", "M2", "M3", "B4", "B5", "B6");
|
||||
testIteration(combineGeometries(base, master), "M1", "M2", "M3", "B4", "B5", "B6");
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -97,7 +98,7 @@ class TestCombinedIterator {
|
||||
master.put(4L, "M4");
|
||||
master.put(6L, "M6");
|
||||
|
||||
testIteration(createIter(base, master), "B1", "M2", "B3", "M4", "B5", "M6");
|
||||
testIteration(combineGeometries(base, master), "B1", "M2", "B3", "M4", "B5", "M6");
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -115,7 +116,7 @@ class TestCombinedIterator {
|
||||
master.put(7L, "M7");
|
||||
master.put(8L, "M8");
|
||||
|
||||
testIteration(createIter(base, master), "B1", "B2", "M3", "M4", "B5", "B6", "M7", "M8");
|
||||
testIteration(combineGeometries(base, master), "B1", "B2", "M3", "M4", "B5", "B6", "M7", "M8");
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -131,7 +132,7 @@ class TestCombinedIterator {
|
||||
master.put(2L, "M2");
|
||||
master.put(3L, "M3");
|
||||
|
||||
testIteration(createIter(base, master), "B1", "B2", "B3");
|
||||
testIteration(combineGeometries(base, master), "B1", "B2", "B3");
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -148,12 +149,6 @@ class TestCombinedIterator {
|
||||
master.put(3L, "M3");
|
||||
master.put(4L, "M4");
|
||||
|
||||
testIteration(createIter(base, master), "B1", "B2", "B3", "M4");
|
||||
}
|
||||
|
||||
|
||||
private static <T> Iterable<T> createIter(SortedMap<Long, T> map1, SortedMap<Long, T> map2) {
|
||||
// TODO: try to use commons collection and remove CombinedIterable
|
||||
return new CombinedIterable<>(map1, map2);
|
||||
testIteration(combineGeometries(base, master), "B1", "B2", "B3", "M4");
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user