.gitattributes
@@ -19,7 +19,7 @@ xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/EllipseElement.java svneol=native#text/plain xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/FrammeAttributeData.java svneol=native#text/plain xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/GeometryConverter.java svneol=native#text/plain xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/IElementHandler.java svneol=native#text/plain xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/IElementHandler.java -text xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/LineElement.java svneol=native#text/plain xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/LineStringElement.java svneol=native#text/plain xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/Lock.java svneol=native#text/plain xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexChainElement.java
@@ -8,10 +8,8 @@ import org.apache.log4j.Logger; import com.vividsolutions.jts.geom.CoordinateList; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.MultiLineString; import com.vividsolutions.jts.geom.LineString; /** xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/Element.java
@@ -5,9 +5,9 @@ import java.nio.BufferUnderflowException; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.ShortBuffer; import java.util.ArrayList; import java.util.List; import java.util.Arrays; import com.vividsolutions.jts.geom.Envelope; @@ -71,6 +71,29 @@ DgnUtility.converUnitToCoord(lowCoorY), DgnUtility.converUnitToCoord(highCoorY)); } public void setRange(Envelope bbox) { int lowCoordX = DgnUtility.converCoordToUnit(bbox.getMinX()); int temp = DgnUtility.converToDGN(lowCoordX); raw[3] = (short) (temp >> 16 & 0x0000ffff); raw[2] = (short) (temp & 0x0000ffff); int lowCoordY = DgnUtility.converCoordToUnit(bbox.getMinY()); temp = DgnUtility.converToDGN(lowCoordY); raw[5] = (short) (temp >> 16 & 0x0000ffff); raw[4] = (short) (temp & 0x0000ffff); int highCoorX = DgnUtility.converCoordToUnit(bbox.getMaxX()); temp = DgnUtility.converToDGN(highCoorX); raw[9] = (short) (temp >> 16 & 0x0000ffff); raw[8] = (short) (temp & 0x0000ffff); int highCoorY = DgnUtility.converCoordToUnit(bbox.getMaxY()); temp = DgnUtility.converToDGN(highCoorY); raw[11] = (short) (temp >> 16 & 0x0000ffff); raw[10] = (short) (temp & 0x0000ffff); } public boolean isComponentElement() { return (short) ((raw[0] >>> 7) & 0x0001) == 1; @@ -109,6 +132,11 @@ public int getLevelIndex() { return (raw[0] & 0x003f); } public void setLevelIndex(int value) { raw[0] = (short) ((raw[0] & 0xffc0) | (value & 0x003f)); } public int getWeight() @@ -227,6 +255,18 @@ return offset * 2; } public void resyncBuffer() { byte[] tempRaw = new byte[this.raw.length * 2]; ByteBuffer tempBuffer = ByteBuffer.wrap(tempRaw); tempBuffer.order(ByteOrder.LITTLE_ENDIAN); tempBuffer.asShortBuffer().put(this.raw); int pos = rawBuffer.position(); rawBuffer = tempBuffer; rawBuffer.position(pos); } public static class ElementHandler implements IElementHandler { ElementType elementType; @@ -281,6 +321,11 @@ return ((Element) element).raw.length; } public int getBufferLength(Object element) { return ((Element) element).rawBuffer.limit(); } protected Element createElement(byte[] raw) { return new Element(raw); xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/IElementHandler.java
@@ -20,4 +20,6 @@ public void write(ByteBuffer buffer, Object element); public int getLength(Object element); public int getBufferLength(Object element); } xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextElement.java
@@ -312,6 +312,19 @@ return new Coordinate(dstPt[0], dstPt[1]); } public Object clone() throws CloneNotSupportedException { int pos = this.rawBuffer.position(); this.rawBuffer.position(0); byte[] rawBytes = this.rawBuffer.array(); byte[] otherRaw = new byte[rawBytes.length]; System.arraycopy(rawBytes, 0, otherRaw, 0, rawBytes.length); this.rawBuffer.position(pos); TextElement other = new TextElement(otherRaw); return other; } public static class ElementHandler extends Element.ElementHandler { private static ElementHandler instance = null; xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextNodeElement.java
@@ -184,9 +184,24 @@ // return factory.createMultiPoint(coords.toCoordinateArray()); } public int getTotalWords() { return (raw[18] & 0x0000ffff); } public void setTotalWords(int value) { raw[18] = (short) (value & 0x0000ffff); } public int getNumString() { return (raw[19] & 0x0000ffff); } public void setNumString(int value) { raw[19] = (short) (value & 0x0000ffff); } public int getNodeNumber() @@ -194,9 +209,19 @@ return (raw[20] & 0x0000ffff); } public void setNodeNumber(int value) { raw[20] = (short) (value & 0x0000ffff); } public int getMaxLength() { return (raw[21] & 0x00ff); } public void setMaxLength(int value) { raw[21] = (short) ((value & 0x00ff) | (raw[21] & 0xff00)); } public int getMaxUsed() @@ -204,14 +229,29 @@ return ((raw[21] >> 8) & 0x00ff); } public void setMaxUsed(int value) { raw[21] = (short) (((value << 8) & 0xff00) | (raw[21] & 0x00ff)); } public int getJustification() { return ((raw[22] >> 8) & 0x00ff); } public void setJustification(int value) { raw[22] = (short) (((value << 8) & 0xff00) | (raw[22] & 0x00ff)); } public int getFontIndex() { return (raw[22] & 0x00ff); } public void setFontIndex(int value) { raw[22] = (short) ((value & 0x00ff) | (raw[22] & 0xff00)); } public double getLineSpacing() @@ -220,6 +260,13 @@ lineSpace = ((raw[23] & 0x0000ffff) << 16) | (raw[24] & 0x0000ffff); return lineSpace; } public void setLineSpacing(double value) { int temp = (int) (value*1000.0); raw[23] = (short) ((temp >> 16) & 0x0000ffff); raw[24] = (short) (temp & 0x0000ffff); } public double getTextNodeLength() @@ -232,6 +279,13 @@ return DgnUtility.converIntToDouble(lengthMult); } public void setTextNodeLength(double value) { int temp = DgnUtility.converDoubleToInt(value); raw[25] = (short) ((temp >> 16) & 0x0000ffff); raw[26] = (short) (temp & 0x0000ffff); } public double getTextNodeHeight() { int heightMult; @@ -242,12 +296,26 @@ return DgnUtility.converIntToDouble(heightMult); } public void setTextNodeHeight(double value) { int temp = DgnUtility.converDoubleToInt(value); raw[27] = (short) ((temp >> 16) & 0x0000ffff); raw[28] = (short) (temp & 0x0000ffff); } public double getRotationAngle() { int rotation = (raw[29] << 16 & 0xffff0000); rotation += raw[30]; return DgnUtility.converIntToRotation(rotation); } public void setRotationAngle(double value) { int temp = DgnUtility.converRotatioToInt(value); raw[29] = (short) (temp >> 16 & 0x0000ffff); raw[30] = (short) (temp & 0x0000ffff); } public Coordinate getOrigin() @@ -262,6 +330,36 @@ return new Coordinate(dx, dy); } public void setOrigin(Coordinate value) { int x = DgnUtility.converCoordToUnit(value.x); raw[31] = (short) (x >> 16 & 0x0000ffff); raw[32] = (short) (x & 0x0000ffff); int y = DgnUtility.converCoordToUnit(value.y); raw[33] = (short) (y >> 16 & 0x0000ffff); raw[34] = (short) (y & 0x0000ffff); } public Object clone() throws CloneNotSupportedException { int pos = this.rawBuffer.position(); this.rawBuffer.position(0); byte[] rawBytes = this.rawBuffer.array(); byte[] otherRaw = new byte[rawBytes.length]; System.arraycopy(rawBytes, 0, otherRaw, 0, rawBytes.length); this.rawBuffer.position(pos); TextNodeElement other = new TextNodeElement(otherRaw); for (Object o : this) { TextElement textElm = (TextElement) o; other.add(textElm.clone()); } return other; } public static class ElementHandler extends Element.ElementHandler { private static ElementHandler instance = null; xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2MySQLJob.java
@@ -14,7 +14,6 @@ import java.sql.Statement; import java.sql.Types; import java.sql.Connection; import java.util.Calendar; import java.util.Date; import java.util.Map; import java.util.TreeMap; xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java
@@ -14,7 +14,6 @@ import java.sql.Statement; import java.sql.Types; import java.sql.Connection; import java.util.Calendar; import java.util.Date; import java.util.Map; import java.util.TreeMap; xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleElementLogger.java
@@ -12,6 +12,7 @@ import java.sql.Statement; import java.sql.Types; import java.util.ArrayList; import java.util.ListIterator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -31,11 +32,13 @@ import com.ximple.io.dgn7.ShapeElement; import com.ximple.io.dgn7.TextElement; import com.ximple.io.dgn7.TextNodeElement; import com.ximple.io.dgn7.IElementHandler; import com.ximple.io.dgn7.Dgn7fileException; public class OracleElementLogger { static Log logger = LogFactory.getLog(OracleElementLogger.class); private static final String ELMOUTPATH = "elmout"; private static final String DEFAULT_ELMOUTPATH = "elmout"; private static final String TAB_IGDSSEED = "SD$IGDSSET_SEED"; private Connection connection; @@ -47,17 +50,25 @@ private FileChannel fch = null; private int logCount = 0; private ArrayList<byte[]> dgnFileHeader = null; private String elmOutPath; public OracleElementLogger(Connection connection) { this.connection = connection; elmOutPath = DEFAULT_ELMOUTPATH; } public OracleElementLogger(Connection connection, String elmOutPath) { this.connection = connection; this.elmOutPath = elmOutPath; } public String getDataOutPath() { if (dataOut == null) { File outPath = new File(getDataPath(), ELMOUTPATH); File outPath = new File(getDataPath(), elmOutPath); if (!outPath.exists()) { outPath.mkdir(); @@ -118,6 +129,7 @@ } } ArrayList<ByteBuffer> subBuffers = new ArrayList<ByteBuffer>(); if (fch != null) { ByteBuffer buf = null; @@ -141,11 +153,45 @@ int size = ComplexChainElement.ElementHandler.getInstance().getLength(element); buf = ByteBuffer.allocate(size * 2); ComplexChainElement.ElementHandler.getInstance().write(buf, element); ComplexChainElement complexElement = (ComplexChainElement) element; ListIterator it = complexElement.listIterator(); while (it.hasNext()) { Element subElm = (Element) it.next(); try { IElementHandler handler = subElm.getElementType().getElementHandler(); size = handler.getLength(subElm); ByteBuffer subBuf = ByteBuffer.allocate(size * 2); handler.write(subBuf, subElm); subBuffers.add(subBuf); } catch (Dgn7fileException e) { logger.warn(e.getMessage(), e); } } } else if (element instanceof ComplexShapeElement) { int size = ComplexShapeElement.ElementHandler.getInstance().getLength(element); buf = ByteBuffer.allocate(size * 2); ComplexShapeElement.ElementHandler.getInstance().write(buf, element); ComplexShapeElement complexElement = (ComplexShapeElement) element; ListIterator it = complexElement.listIterator(); while (it.hasNext()) { Element subElm = (Element) it.next(); try { IElementHandler handler = subElm.getElementType().getElementHandler(); size = handler.getLength(subElm); ByteBuffer subBuf = ByteBuffer.allocate(size * 2); handler.write(subBuf, subElm); subBuffers.add(subBuf); } catch (Dgn7fileException e) { logger.warn(e.getMessage(), e); } } } else if (element instanceof ArcElement) { int size = ArcElement.ElementHandler.getInstance().getLength(element); @@ -166,6 +212,23 @@ int size = TextNodeElement.ElementHandler.getInstance().getLength(element); buf = ByteBuffer.allocate(size * 2); TextNodeElement.ElementHandler.getInstance().write(buf, element); TextNodeElement nodeElement = (TextNodeElement) element; ListIterator it = nodeElement.listIterator(); while (it.hasNext()) { Element subElm = (Element) it.next(); try { IElementHandler handler = subElm.getElementType().getElementHandler(); size = handler.getLength(subElm); ByteBuffer subBuf = ByteBuffer.allocate(size * 2); handler.write(subBuf, subElm); subBuffers.add(subBuf); } catch (Dgn7fileException e) { logger.warn(e.getMessage(), e); } } } if ((buf != null) && (fch != null)) @@ -185,6 +248,26 @@ } } } if ((subBuffers.size() != 0) && (fch != null)) { for (ByteBuffer buf : subBuffers) { try { buf.position(0); int size = fch.write(buf); if (size != buf.limit()) { long position = fch.position(); logger.info("Pos:" + position); } } catch (IOException e) { logger.warn(e.getMessage(), e); } } } } private void createNewStream() throws IOException, SQLException