You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2019/12/22 21:44:48 UTC
svn commit: r1871911 [12/15] - in /poi/trunk/src:
integrationtest/org/apache/poi/
integrationtest/org/apache/poi/hssf/usermodel/ java/org/apache/poi/common/
java/org/apache/poi/ddf/
java/org/apache/poi/hssf/eventusermodel/dummyrecord/ java/org/apache/p...
Modified: poi/trunk/src/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIEncryptor.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIEncryptor.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIEncryptor.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIEncryptor.java Sun Dec 22 21:44:45 2019
@@ -46,11 +46,15 @@ import org.apache.poi.util.IOUtils;
import org.apache.poi.util.LittleEndian;
import org.apache.poi.util.StringUtil;
-public class CryptoAPIEncryptor extends Encryptor implements Cloneable {
-
+public class CryptoAPIEncryptor extends Encryptor {
+
private int chunkSize = 512;
-
- CryptoAPIEncryptor() {
+
+ CryptoAPIEncryptor() {}
+
+ CryptoAPIEncryptor(CryptoAPIEncryptor other) {
+ super(other);
+ chunkSize = other.chunkSize;
}
@Override
@@ -98,31 +102,31 @@ public class CryptoAPIEncryptor extends
public Cipher initCipherForBlock(Cipher cipher, int block)
throws GeneralSecurityException {
return CryptoAPIDecryptor.initCipherForBlock(cipher, block, getEncryptionInfo(), getSecretKey(), Cipher.ENCRYPT_MODE);
- }
+ }
@Override
public ChunkedCipherOutputStream getDataStream(DirectoryNode dir) throws IOException {
throw new IOException("not supported");
}
-
+
@Override
public CryptoAPICipherOutputStream getDataStream(OutputStream stream, int initialOffset)
throws IOException, GeneralSecurityException {
return new CryptoAPICipherOutputStream(stream);
}
-
+
/**
* Encrypt the Document-/SummaryInformation and other optionally streams.
* Opposed to other crypto modes, cryptoapi is record based and can't be used
* to stream-encrypt a whole file
- *
+ *
* @see <a href="http://msdn.microsoft.com/en-us/library/dd943321(v=office.12).aspx">2.3.5.4 RC4 CryptoAPI Encrypted Summary Stream</a>
*/
public void setSummaryEntries(DirectoryNode dir, String encryptedStream, POIFSFileSystem entries)
throws IOException, GeneralSecurityException {
CryptoAPIDocumentOutputStream bos = new CryptoAPIDocumentOutputStream(this); // NOSONAR
byte[] buf = new byte[8];
-
+
bos.write(buf, 0, 8); // skip header
List<StreamDescriptorEntry> descList = new ArrayList<>();
@@ -137,24 +141,24 @@ public class CryptoAPIEncryptor extends
descEntry.streamName = entry.getName();
descEntry.flags = StreamDescriptorEntry.flagStream.setValue(0, 1);
descEntry.reserved2 = 0;
-
+
bos.setBlock(block);
DocumentInputStream dis = dir.createDocumentInputStream(entry);
IOUtils.copy(dis, bos);
dis.close();
-
+
descEntry.streamSize = bos.size() - descEntry.streamOffset;
descList.add(descEntry);
-
+
block++;
}
-
+
int streamDescriptorArrayOffset = bos.size();
-
+
bos.setBlock(0);
LittleEndian.putUInt(buf, 0, descList.size());
bos.write(buf, 0, 4);
-
+
for (StreamDescriptorEntry sde : descList) {
LittleEndian.putUInt(buf, 0, sde.streamOffset);
bos.write(buf, 0, 4);
@@ -173,7 +177,7 @@ public class CryptoAPIEncryptor extends
LittleEndian.putShort(buf, 0, (short)0); // null-termination
bos.write(buf, 0, 2);
}
-
+
int savedSize = bos.size();
int streamDescriptorArraySize = savedSize - streamDescriptorArrayOffset;
LittleEndian.putUInt(buf, 0, streamDescriptorArrayOffset);
@@ -183,7 +187,7 @@ public class CryptoAPIEncryptor extends
bos.setBlock(0);
bos.write(buf, 0, 8);
bos.setSize(savedSize);
-
+
dir.createDocument(encryptedStream, new ByteArrayInputStream(bos.getBuf(), 0, savedSize));
}
@@ -195,10 +199,10 @@ public class CryptoAPIEncryptor extends
public void setChunkSize(int chunkSize) {
this.chunkSize = chunkSize;
}
-
+
@Override
- public CryptoAPIEncryptor clone() throws CloneNotSupportedException {
- return (CryptoAPIEncryptor)super.clone();
+ public CryptoAPIEncryptor copy() {
+ return new CryptoAPIEncryptor(this);
}
protected class CryptoAPICipherOutputStream extends ChunkedCipherOutputStream {
Modified: poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardDecryptor.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardDecryptor.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardDecryptor.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardDecryptor.java Sun Dec 22 21:44:45 2019
@@ -43,10 +43,14 @@ import org.apache.poi.util.LittleEndian;
/**
*/
-public class StandardDecryptor extends Decryptor implements Cloneable {
+public class StandardDecryptor extends Decryptor {
private long _length = -1;
- protected StandardDecryptor() {
+ protected StandardDecryptor() {}
+
+ protected StandardDecryptor(StandardDecryptor other) {
+ super(other);
+ _length = other._length;
}
@Override
@@ -68,7 +72,7 @@ public class StandardDecryptor extends D
// ... The number of bytes used by the encrypted Verifier hash MUST be 32 ...
// TODO: check and trim/pad the hashes to 32
byte[] verifierHash = Arrays.copyOf(decryptedVerifierHash, calcVerifierHash.length);
-
+
if (Arrays.equals(calcVerifierHash, verifierHash)) {
setSecretKey(skey);
return true;
@@ -79,7 +83,7 @@ public class StandardDecryptor extends D
throw new EncryptedDocumentException(e);
}
}
-
+
protected static SecretKey generateSecretKey(String password, EncryptionVerifier ver, int keySize) {
HashAlgorithm hashAlgo = ver.getHashAlgorithm();
@@ -95,7 +99,7 @@ public class StandardDecryptor extends D
byte[] x3 = new byte[x1.length + x2.length];
System.arraycopy(x1, 0, x3, 0, x1.length);
System.arraycopy(x2, 0, x3, x1.length, x2.length);
-
+
byte[] key = Arrays.copyOf(x3, keySize);
return new SecretKeySpec(key, ver.getCipherAlgorithm().jceId);
@@ -131,12 +135,12 @@ public class StandardDecryptor extends D
verifyPassword(null);
}
// limit wrong calculated ole entries - (bug #57080)
- // standard encryption always uses aes encoding, so blockSize is always 16
+ // standard encryption always uses aes encoding, so blockSize is always 16
// http://stackoverflow.com/questions/3283787/size-of-data-after-aes-encryption
int blockSize = getEncryptionInfo().getHeader().getCipherAlgorithm().blockSize;
long cipherLen = (_length/blockSize + 1) * blockSize;
Cipher cipher = getCipher(getSecretKey());
-
+
InputStream boundedDis = new BoundedInputStream(dis, cipherLen);
return new BoundedInputStream(new CipherInputStream(boundedDis, cipher), _length);
}
@@ -153,7 +157,7 @@ public class StandardDecryptor extends D
}
@Override
- public StandardDecryptor clone() throws CloneNotSupportedException {
- return (StandardDecryptor)super.clone();
+ public StandardDecryptor copy() {
+ return new StandardDecryptor(this);
}
}
Modified: poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptionHeader.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptionHeader.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptionHeader.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptionHeader.java Sun Dec 22 21:44:45 2019
@@ -34,7 +34,11 @@ import org.apache.poi.util.LittleEndianI
import org.apache.poi.util.LittleEndianOutput;
import org.apache.poi.util.StringUtil;
-public class StandardEncryptionHeader extends EncryptionHeader implements EncryptionRecord, Cloneable {
+public class StandardEncryptionHeader extends EncryptionHeader implements EncryptionRecord {
+
+ protected StandardEncryptionHeader(StandardEncryptionHeader other) {
+ super(other);
+ }
protected StandardEncryptionHeader(LittleEndianInput is) throws IOException {
setFlags(is.readInt());
@@ -67,7 +71,7 @@ public class StandardEncryptionHeader ex
} else {
((InputStream)is).reset();
}
-
+
if (checkForSalt == 16) {
setCspName("");
} else {
@@ -81,7 +85,7 @@ public class StandardEncryptionHeader ex
}
setCspName(builder.toString());
}
-
+
setChainingMode(ChainingMode.ecb);
setKeySalt(null);
}
@@ -97,9 +101,9 @@ public class StandardEncryptionHeader ex
// see http://msdn.microsoft.com/en-us/library/windows/desktop/bb931357(v=vs.85).aspx for a full list
// setCspName("Microsoft Enhanced RSA and AES Cryptographic Provider");
}
-
+
/**
- * serializes the header
+ * serializes the header
*/
@Override
public void write(LittleEndianByteArrayOutputStream bos) {
@@ -120,11 +124,11 @@ public class StandardEncryptionHeader ex
bos.write(StringUtil.getToUnicodeLE(cspName));
bos.writeShort(0);
int headerSize = bos.getWriteIndex()-startIdx-LittleEndianConsts.INT_SIZE;
- sizeOutput.writeInt(headerSize);
+ sizeOutput.writeInt(headerSize);
}
@Override
- public StandardEncryptionHeader clone() throws CloneNotSupportedException {
- return (StandardEncryptionHeader)super.clone();
+ public StandardEncryptionHeader copy() {
+ return new StandardEncryptionHeader(this);
}
}
Modified: poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptionVerifier.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptionVerifier.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptionVerifier.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptionVerifier.java Sun Dec 22 21:44:45 2019
@@ -25,12 +25,12 @@ import org.apache.poi.util.LittleEndianB
import org.apache.poi.util.LittleEndianInput;
/**
- * Used when checking if a key is valid for a document
+ * Used when checking if a key is valid for a document
*/
-public class StandardEncryptionVerifier extends EncryptionVerifier implements EncryptionRecord, Cloneable {
+public class StandardEncryptionVerifier extends EncryptionVerifier implements EncryptionRecord {
private static final int SPIN_COUNT = 50000;
private final int verifierHashSize;
-
+
protected StandardEncryptionVerifier(LittleEndianInput is, StandardEncryptionHeader header) {
int saltSize = is.readInt();
@@ -56,9 +56,9 @@ public class StandardEncryptionVerifier
setCipherAlgorithm(header.getCipherAlgorithm());
setChainingMode(header.getChainingMode());
setEncryptedKey(null);
- setHashAlgorithm(header.getHashAlgorithm());
+ setHashAlgorithm(header.getHashAlgorithm());
}
-
+
protected StandardEncryptionVerifier(CipherAlgorithm cipherAlgorithm, HashAlgorithm hashAlgorithm, int keyBits, int blockSize, ChainingMode chainingMode) {
setCipherAlgorithm(cipherAlgorithm);
setHashAlgorithm(hashAlgorithm);
@@ -67,6 +67,11 @@ public class StandardEncryptionVerifier
verifierHashSize = hashAlgorithm.hashSize;
}
+ protected StandardEncryptionVerifier(StandardEncryptionVerifier other) {
+ super(other);
+ verifierHashSize = other.verifierHashSize;
+ }
+
// make method visible for this package
@Override
protected void setSalt(byte[] salt) {
@@ -75,7 +80,7 @@ public class StandardEncryptionVerifier
}
super.setSalt(salt);
}
-
+
// make method visible for this package
@Override
protected void setEncryptedVerifier(byte[] encryptedVerifier) {
@@ -87,7 +92,7 @@ public class StandardEncryptionVerifier
protected void setEncryptedVerifierHash(byte[] encryptedVerifierHash) {
super.setEncryptedVerifierHash(encryptedVerifierHash);
}
-
+
@Override
public void write(LittleEndianByteArrayOutputStream bos) {
// see [MS-OFFCRYPTO] - 2.3.4.9
@@ -95,7 +100,7 @@ public class StandardEncryptionVerifier
assert(salt.length == 16);
bos.writeInt(salt.length); // salt size
bos.write(salt);
-
+
// The resulting Verifier value MUST be an array of 16 bytes.
byte[] encryptedVerifier = getEncryptedVerifier();
assert(encryptedVerifier.length == 16);
@@ -121,7 +126,7 @@ public class StandardEncryptionVerifier
}
@Override
- public StandardEncryptionVerifier clone() throws CloneNotSupportedException {
- return (StandardEncryptionVerifier)super.clone();
+ public StandardEncryptionVerifier copy() {
+ return new StandardEncryptionVerifier(this);
}
}
Modified: poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptor.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptor.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptor.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptor.java Sun Dec 22 21:44:45 2019
@@ -53,11 +53,14 @@ import org.apache.poi.util.POILogFactory
import org.apache.poi.util.POILogger;
import org.apache.poi.util.TempFile;
-public class StandardEncryptor extends Encryptor implements Cloneable {
+public class StandardEncryptor extends Encryptor {
private static final POILogger logger = POILogFactory.getLogger(StandardEncryptor.class);
- protected StandardEncryptor() {
- }
+ protected StandardEncryptor() {}
+
+ protected StandardEncryptor(StandardEncryptor other) {
+ super(other);
+ }
@Override
public void confirmPassword(String password) {
@@ -66,15 +69,15 @@ public class StandardEncryptor extends E
byte[] salt = new byte[16], verifier = new byte[16];
r.nextBytes(salt);
r.nextBytes(verifier);
-
+
confirmPassword(password, null, null, salt, verifier, null);
}
-
-
+
+
/**
* Fills the fields of verifier and header with the calculated hashes based
* on the password and a random salt
- *
+ *
* see [MS-OFFCRYPTO] - 2.3.4.7 ECMA-376 Document Encryption Key Generation
*/
@Override
@@ -85,35 +88,35 @@ public class StandardEncryptor extends E
SecretKey secretKey = generateSecretKey(password, ver, getKeySizeInBytes());
setSecretKey(secretKey);
Cipher cipher = getCipher(secretKey, null);
-
+
try {
byte[] encryptedVerifier = cipher.doFinal(verifier);
MessageDigest hashAlgo = CryptoFunctions.getMessageDigest(ver.getHashAlgorithm());
byte[] calcVerifierHash = hashAlgo.digest(verifier);
-
+
// 2.3.3 EncryptionVerifier ...
- // An array of bytes that contains the encrypted form of the
- // hash of the randomly generated Verifier value. The length of the array MUST be the size of
- // the encryption block size multiplied by the number of blocks needed to encrypt the hash of the
- // Verifier. If the encryption algorithm is RC4, the length MUST be 20 bytes. If the encryption
+ // An array of bytes that contains the encrypted form of the
+ // hash of the randomly generated Verifier value. The length of the array MUST be the size of
+ // the encryption block size multiplied by the number of blocks needed to encrypt the hash of the
+ // Verifier. If the encryption algorithm is RC4, the length MUST be 20 bytes. If the encryption
// algorithm is AES, the length MUST be 32 bytes. After decrypting the EncryptedVerifierHash
// field, only the first VerifierHashSize bytes MUST be used.
int encVerHashSize = ver.getCipherAlgorithm().encryptedVerifierHashLength;
byte[] encryptedVerifierHash = cipher.doFinal(Arrays.copyOf(calcVerifierHash, encVerHashSize));
-
+
ver.setEncryptedVerifier(encryptedVerifier);
ver.setEncryptedVerifierHash(encryptedVerifierHash);
} catch (GeneralSecurityException e) {
throw new EncryptedDocumentException("Password confirmation failed", e);
}
-
+
}
private Cipher getCipher(SecretKey key, String padding) {
EncryptionVerifier ver = getEncryptionInfo().getVerifier();
return CryptoFunctions.getCipher(key, ver.getCipherAlgorithm(), ver.getChainingMode(), null, Cipher.ENCRYPT_MODE, padding);
}
-
+
@Override
public OutputStream getDataStream(final DirectoryNode dir)
throws IOException, GeneralSecurityException {
@@ -121,7 +124,7 @@ public class StandardEncryptor extends E
DataSpaceMapUtils.addDefaultDataSpace(dir);
return new StandardCipherOutputStream(dir);
}
-
+
protected class StandardCipherOutputStream extends FilterOutputStream implements POIFSWriterListener {
protected long countBytes;
protected final File fileOut;
@@ -137,19 +140,19 @@ public class StandardEncryptor extends E
// see also [MS-OFFCRYPT] - 2.3.4.15
// The final data block MUST be padded to the next integral multiple of the
// KeyData.blockSize value. Any padding bytes can be used. Note that the StreamSize
- // field of the EncryptedPackage field specifies the number of bytes of
+ // field of the EncryptedPackage field specifies the number of bytes of
// unencrypted data as specified in section 2.3.4.4.
super(
- new CipherOutputStream(new FileOutputStream(fileOut), getCipher(getSecretKey(), "PKCS5Padding"))
+ new CipherOutputStream(new FileOutputStream(fileOut), getCipher(getSecretKey(), "PKCS5Padding"))
);
this.fileOut = fileOut;
this.dir = dir;
}
-
+
protected StandardCipherOutputStream(DirectoryNode dir) throws IOException {
this(dir, TempFile.createTempFile("encrypted_package", "crypt"));
}
-
+
@Override
public void write(byte[] b, int off, int len) throws IOException {
out.write(b, off, len);
@@ -161,28 +164,28 @@ public class StandardEncryptor extends E
out.write(b);
countBytes++;
}
-
+
@Override
public void close() throws IOException {
// the CipherOutputStream adds the padding bytes on close()
- super.close();
+ super.close();
writeToPOIFS();
}
-
+
void writeToPOIFS() throws IOException {
int oleStreamSize = (int)(fileOut.length()+LittleEndianConsts.LONG_SIZE);
dir.createDocument(DEFAULT_POIFS_ENTRY, oleStreamSize, this);
// TODO: any properties???
}
-
+
@Override
public void processPOIFSWriterEvent(POIFSWriterEvent event) {
try {
LittleEndianOutputStream leos = new LittleEndianOutputStream(event.getStream());
- // StreamSize (8 bytes): An unsigned integer that specifies the number of bytes used by data
- // encrypted within the EncryptedData field, not including the size of the StreamSize field.
- // Note that the actual size of the \EncryptedPackage stream (1) can be larger than this
+ // StreamSize (8 bytes): An unsigned integer that specifies the number of bytes used by data
+ // encrypted within the EncryptedData field, not including the size of the StreamSize field.
+ // Note that the actual size of the \EncryptedPackage stream (1) can be larger than this
// value, depending on the block size of the chosen encryption algorithm
leos.writeLong(countBytes);
@@ -199,16 +202,16 @@ public class StandardEncryptor extends E
}
}
}
-
+
protected int getKeySizeInBytes() {
return getEncryptionInfo().getHeader().getKeySize()/8;
}
-
+
protected void createEncryptionInfoEntry(DirectoryNode dir) throws IOException {
final EncryptionInfo info = getEncryptionInfo();
final StandardEncryptionHeader header = (StandardEncryptionHeader)info.getHeader();
final StandardEncryptionVerifier verifier = (StandardEncryptionVerifier)info.getVerifier();
-
+
EncryptionRecord er = new EncryptionRecord(){
@Override
public void write(LittleEndianByteArrayOutputStream bos) {
@@ -219,14 +222,14 @@ public class StandardEncryptor extends E
verifier.write(bos);
}
};
-
+
createEncryptionEntry(dir, "EncryptionInfo", er);
-
+
// TODO: any properties???
}
@Override
- public StandardEncryptor clone() throws CloneNotSupportedException {
- return (StandardEncryptor)super.clone();
+ public StandardEncryptor copy() {
+ return new StandardEncryptor(this);
}
}
Modified: poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XORDecryptor.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XORDecryptor.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XORDecryptor.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XORDecryptor.java Sun Dec 22 21:44:45 2019
@@ -33,11 +33,16 @@ import org.apache.poi.poifs.crypt.Encryp
import org.apache.poi.poifs.filesystem.DirectoryNode;
import org.apache.poi.util.LittleEndian;
-public class XORDecryptor extends Decryptor implements Cloneable {
+public class XORDecryptor extends Decryptor {
private long length = -1L;
private int chunkSize = 512;
- protected XORDecryptor() {
+ protected XORDecryptor() {}
+
+ protected XORDecryptor(XORDecryptor other) {
+ super(other);
+ length = other.length;
+ chunkSize = other.chunkSize;
}
@Override
@@ -93,23 +98,23 @@ public class XORDecryptor extends Decryp
public void setChunkSize(int chunkSize) {
this.chunkSize = chunkSize;
}
-
+
@Override
- public XORDecryptor clone() throws CloneNotSupportedException {
- return (XORDecryptor)super.clone();
+ public XORDecryptor copy() {
+ return new XORDecryptor(this);
}
private class XORCipherInputStream extends ChunkedCipherInputStream {
private final int initialOffset;
private int recordStart;
private int recordEnd;
-
+
public XORCipherInputStream(InputStream stream, int initialPos)
throws GeneralSecurityException {
super(stream, Integer.MAX_VALUE, chunkSize);
this.initialOffset = initialPos;
}
-
+
@Override
protected Cipher initCipherForBlock(Cipher existing, int block)
throws GeneralSecurityException {
@@ -123,19 +128,19 @@ public class XORDecryptor extends Decryp
final byte[] chunk = getChunk();
final byte[] plain = getPlain();
final int posInChunk = pos & getChunkMask();
-
+
/*
* From: http://social.msdn.microsoft.com/Forums/en-US/3dadbed3-0e68-4f11-8b43-3a2328d9ebd5
- *
+ *
* The initial value for XorArrayIndex is as follows:
* XorArrayIndex = (FileOffset + Data.Length) % 16
- *
+ *
* The FileOffset variable in this context is the stream offset into the Workbook stream at
* the time we are about to write each of the bytes of the record data.
- * This (the value) is then incremented after each byte is written.
+ * This (the value) is then incremented after each byte is written.
*/
final int xorArrayIndex = initialOffset+recordEnd+(pos-recordStart);
-
+
for (int i=0; pos+i < recordEnd && i < totalBytes; i++) {
// The following is taken from the Libre Office implementation
// It seems that the encrypt and decrypt method is mixed up
@@ -149,16 +154,16 @@ public class XORDecryptor extends Decryp
// the other bytes will be encoded, when setNextRecordSize is called the next time
return totalBytes;
}
-
+
private byte rotateLeft(byte bits, int shift) {
return (byte)(((bits & 0xff) << shift) | ((bits & 0xff) >>> (8 - shift)));
}
-
-
+
+
/**
* Decrypts a xor obfuscated byte array.
* The data is decrypted in-place
- *
+ *
* @see <a href="http://msdn.microsoft.com/en-us/library/dd908506.aspx">2.3.7.3 Binary Document XOR Data Transformation Method 1</a>
*/
@Override
Modified: poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XOREncryptionHeader.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XOREncryptionHeader.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XOREncryptionHeader.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XOREncryptionHeader.java Sun Dec 22 21:44:45 2019
@@ -21,17 +21,21 @@ import org.apache.poi.poifs.crypt.Encryp
import org.apache.poi.poifs.crypt.standard.EncryptionRecord;
import org.apache.poi.util.LittleEndianByteArrayOutputStream;
-public class XOREncryptionHeader extends EncryptionHeader implements EncryptionRecord, Cloneable {
+public class XOREncryptionHeader extends EncryptionHeader implements EncryptionRecord {
protected XOREncryptionHeader() {
}
+ protected XOREncryptionHeader(XOREncryptionHeader other) {
+ super(other);
+ }
+
@Override
public void write(LittleEndianByteArrayOutputStream leos) {
}
@Override
- public XOREncryptionHeader clone() throws CloneNotSupportedException {
- return (XOREncryptionHeader)super.clone();
+ public XOREncryptionHeader copy() {
+ return new XOREncryptionHeader(this);
}
}
Modified: poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XOREncryptionVerifier.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XOREncryptionVerifier.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XOREncryptionVerifier.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XOREncryptionVerifier.java Sun Dec 22 21:44:45 2019
@@ -22,7 +22,7 @@ import org.apache.poi.poifs.crypt.standa
import org.apache.poi.util.LittleEndianByteArrayOutputStream;
import org.apache.poi.util.LittleEndianInput;
-public class XOREncryptionVerifier extends EncryptionVerifier implements EncryptionRecord, Cloneable {
+public class XOREncryptionVerifier extends EncryptionVerifier implements EncryptionRecord {
protected XOREncryptionVerifier() {
setEncryptedKey(new byte[2]);
@@ -31,14 +31,14 @@ public class XOREncryptionVerifier exten
protected XOREncryptionVerifier(LittleEndianInput is) {
/**
- * key (2 bytes): An unsigned integer that specifies the obfuscation key.
+ * key (2 bytes): An unsigned integer that specifies the obfuscation key.
* See [MS-OFFCRYPTO], 2.3.6.2 section, the first step of initializing XOR
* array where it describes the generation of 16-bit XorKey value.
*/
byte[] key = new byte[2];
is.readFully(key);
setEncryptedKey(key);
-
+
/**
* verificationBytes (2 bytes): An unsigned integer that specifies
* the password verification identifier.
@@ -47,7 +47,11 @@ public class XOREncryptionVerifier exten
is.readFully(verifier);
setEncryptedVerifier(verifier);
}
-
+
+ protected XOREncryptionVerifier(XOREncryptionVerifier other) {
+ super(other);
+ }
+
@Override
public void write(LittleEndianByteArrayOutputStream bos) {
bos.write(getEncryptedKey());
@@ -55,8 +59,8 @@ public class XOREncryptionVerifier exten
}
@Override
- public XOREncryptionVerifier clone() throws CloneNotSupportedException {
- return (XOREncryptionVerifier)super.clone();
+ public XOREncryptionVerifier copy() {
+ return new XOREncryptionVerifier(this);
}
@Override
Modified: poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XOREncryptor.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XOREncryptor.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XOREncryptor.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/crypt/xor/XOREncryptor.java Sun Dec 22 21:44:45 2019
@@ -33,8 +33,11 @@ import org.apache.poi.poifs.crypt.Encryp
import org.apache.poi.poifs.filesystem.DirectoryNode;
import org.apache.poi.util.LittleEndian;
-public class XOREncryptor extends Encryptor implements Cloneable {
- protected XOREncryptor() {
+public class XOREncryptor extends Encryptor {
+ protected XOREncryptor() {}
+
+ protected XOREncryptor(XOREncryptor other) {
+ super(other);
}
@Override
@@ -81,8 +84,8 @@ public class XOREncryptor extends Encryp
}
@Override
- public XOREncryptor clone() throws CloneNotSupportedException {
- return (XOREncryptor)super.clone();
+ public XOREncryptor copy() {
+ return new XOREncryptor(this);
}
private class XORCipherOutputStream extends ChunkedCipherOutputStream {
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/Formula.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/Formula.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/Formula.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/Formula.java Sun Dec 22 21:44:45 2019
@@ -31,8 +31,6 @@ import org.apache.poi.util.LittleEndianO
/**
* Encapsulates an encoded formula token array.
- *
- * @author Josh Micich
*/
public class Formula {
@@ -45,6 +43,11 @@ public class Formula {
private final byte[] _byteEncoding;
private final int _encodedTokenLen;
+ public Formula(Formula other) {
+ _byteEncoding = (other._byteEncoding == null) ? null : other._byteEncoding.clone();
+ _encodedTokenLen = other._encodedTokenLen;
+ }
+
private Formula(byte[] byteEncoding, int encodedTokenLen) {
_byteEncoding = byteEncoding.clone();
_encodedTokenLen = encodedTokenLen;
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AbstractFunctionPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AbstractFunctionPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AbstractFunctionPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AbstractFunctionPtg.java Sun Dec 22 21:44:45 2019
@@ -26,8 +26,6 @@ import org.apache.poi.ss.formula.functio
* This class provides the base functionality for Excel sheet functions
* There are two kinds of function Ptgs - tFunc and tFuncVar
* Therefore, this class will have ONLY two subclasses
- * @author Avik Sengupta
- * @author Andrew C. Oliver (acoliver at apache dot org)
*/
public abstract class AbstractFunctionPtg extends OperationPtg {
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AddPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AddPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AddPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AddPtg.java Sun Dec 22 21:44:45 2019
@@ -18,22 +18,19 @@
package org.apache.poi.ss.formula.ptg;
/**
- * Addition operator PTG the "+" binomial operator. If you need more
- * explanation than that then well...We really can't help you here.
- * @author Andrew C. Oliver (acoliver@apache.org)
- * @author Jason Height (jheight at chariot dot net dot au)
+ * Addition operator PTG the "+" binomial operator.
*/
public final class AddPtg extends ValueOperatorPtg {
public final static byte sid = 0x03;
-
+
private final static String ADD = "+";
- public static final ValueOperatorPtg instance = new AddPtg();
+ public static final AddPtg instance = new AddPtg();
private AddPtg() {
// enforce singleton
}
-
+
protected byte getSid() {
return sid;
}
@@ -41,8 +38,8 @@ public final class AddPtg extends ValueO
public int getNumberOfOperands() {
return 2;
}
-
- /** implementation of method from OperationsPtg*/
+
+ /** implementation of method from OperationsPtg*/
public String toFormulaString(String[] operands) {
StringBuilder buffer = new StringBuilder();
@@ -51,4 +48,9 @@ public final class AddPtg extends ValueO
buffer.append(operands[ 1 ]);
return buffer.toString();
}
+
+ @Override
+ public AddPtg copy() {
+ return instance;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Area2DPtgBase.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Area2DPtgBase.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Area2DPtgBase.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Area2DPtgBase.java Sun Dec 22 21:44:45 2019
@@ -30,6 +30,11 @@ public abstract class Area2DPtgBase exte
protected Area2DPtgBase(int firstRow, int lastRow, int firstColumn, int lastColumn, boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative) {
super(firstRow, lastRow, firstColumn, lastColumn, firstRowRelative, lastRowRelative, firstColRelative, lastColRelative);
}
+
+ protected Area2DPtgBase(Area2DPtgBase other) {
+ super(other);
+ }
+
protected Area2DPtgBase(AreaReference ar) {
super(ar);
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Area3DPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Area3DPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Area3DPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Area3DPtg.java Sun Dec 22 21:44:45 2019
@@ -26,13 +26,11 @@ import org.apache.poi.util.LittleEndianI
import org.apache.poi.util.LittleEndianOutput;
/**
- * <p>Title: Area 3D Ptg - 3D reference (Sheet + Area)</p>
- * <p>Description: Defined an area in Extern Sheet. </p>
- * <p>REFERENCE: </p>
- *
- * <p>This is HSSF only, as it matches the HSSF file format way of
- * referring to the sheet by an extern index. The XSSF equivalent
- * is {@link Area3DPxg}
+ * Area 3D Ptg - 3D reference (Sheet + Area)<p>
+ * Defined an area in Extern Sheet.<p>
+ *
+ * This is HSSF only, as it matches the HSSF file format way of referring to the sheet by an extern index.
+ * The XSSF equivalent is {@link Area3DPxg}
*/
public final class Area3DPtg extends AreaPtgBase implements WorkbookDependentFormula, ExternSheetReferenceToken {
public final static byte sid = 0x3b;
@@ -46,6 +44,11 @@ public final class Area3DPtg extends Are
setExternSheetIndex(externIdx);
}
+ public Area3DPtg(Area3DPtg other) {
+ super(other);
+ field_1_index_extern_sheet = other.field_1_index_extern_sheet;
+ }
+
public Area3DPtg(LittleEndianInput in) {
field_1_index_extern_sheet = in.readShort();
readCoordinates(in);
@@ -104,8 +107,14 @@ public final class Area3DPtg extends Are
public String toFormulaString(FormulaRenderingWorkbook book) {
return ExternSheetNameResolver.prependSheetName(book, field_1_index_extern_sheet, formatReferenceAsString());
}
+
@Override
public String toFormulaString() {
throw new RuntimeException("3D references need a workbook to determine formula text");
}
+
+ @Override
+ public Area3DPtg copy() {
+ return new Area3DPtg(this);
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Area3DPxg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Area3DPxg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Area3DPxg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Area3DPxg.java Sun Dec 22 21:44:45 2019
@@ -19,28 +19,34 @@ package org.apache.poi.ss.formula.ptg;
import org.apache.poi.ss.SpreadsheetVersion;
import org.apache.poi.ss.formula.SheetIdentifier;
-import org.apache.poi.ss.formula.SheetNameFormatter;
import org.apache.poi.ss.formula.SheetRangeAndWorkbookIndexFormatter;
import org.apache.poi.ss.formula.SheetRangeIdentifier;
import org.apache.poi.ss.util.AreaReference;
import org.apache.poi.util.LittleEndianOutput;
/**
- * <p>Title: XSSF Area 3D Reference (Sheet + Area)<P>
- * <p>Description: Defined an area in an external or different sheet. <P>
- * <p>REFERENCE: </p>
- *
- * <p>This is XSSF only, as it stores the sheet / book references
- * in String form. The HSSF equivalent using indexes is {@link Area3DPtg}</p>
+ * XSSF Area 3D Reference (Sheet + Area)<p>
+ * Defined an area in an external or different sheet.<p>
+ *
+ * This is XSSF only, as it stores the sheet / book references
+ * in String form. The HSSF equivalent using indexes is {@link Area3DPtg}
*/
public final class Area3DPxg extends AreaPtgBase implements Pxg3D {
private int externalWorkbookNumber = -1;
private String firstSheetName;
private String lastSheetName;
+ public Area3DPxg(Area3DPxg other) {
+ super(other);
+ externalWorkbookNumber = other.externalWorkbookNumber;
+ firstSheetName = other.firstSheetName;
+ lastSheetName = other.lastSheetName;
+ }
+
public Area3DPxg(int externalWorkbookNumber, SheetIdentifier sheetName, String arearef) {
this(externalWorkbookNumber, sheetName, new AreaReference(arearef, SpreadsheetVersion.EXCEL2007));
}
+
public Area3DPxg(int externalWorkbookNumber, SheetIdentifier sheetName, AreaReference arearef) {
super(arearef);
this.externalWorkbookNumber = externalWorkbookNumber;
@@ -79,7 +85,7 @@ public final class Area3DPxg extends Are
sb.append("]");
return sb.toString();
}
-
+
public int getExternalWorkbookNumber() {
return externalWorkbookNumber;
}
@@ -89,7 +95,7 @@ public final class Area3DPxg extends Are
public String getLastSheetName() {
return lastSheetName;
}
-
+
public void setSheetName(String sheetName) {
this.firstSheetName = sheetName;
}
@@ -100,7 +106,7 @@ public final class Area3DPxg extends Are
public String format2DRefAsString() {
return formatReferenceAsString();
}
-
+
public String toFormulaString() {
StringBuilder sb = new StringBuilder(64);
@@ -117,4 +123,8 @@ public final class Area3DPxg extends Are
throw new IllegalStateException("XSSF-only Ptg, should not be serialised");
}
+ @Override
+ public Area3DPxg copy() {
+ return new Area3DPxg(this);
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaErrPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaErrPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaErrPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaErrPtg.java Sun Dec 22 21:44:45 2019
@@ -23,8 +23,6 @@ import org.apache.poi.util.LittleEndianO
/**
* AreaErr - handles deleted cell area references.
- *
- * @author Daniel Noll (daniel at nuix dot com dot au)
*/
public final class AreaErrPtg extends OperandPtg {
public final static byte sid = 0x2B;
@@ -59,5 +57,10 @@ public final class AreaErrPtg extends Op
public int getSize() {
return 9;
}
-}
+ @Override
+ public AreaErrPtg copy() {
+ // immutable
+ return this;
+ }
+}
\ No newline at end of file
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaNPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaNPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaNPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaNPtg.java Sun Dec 22 21:44:45 2019
@@ -26,6 +26,10 @@ import org.apache.poi.util.LittleEndianI
public final class AreaNPtg extends Area2DPtgBase {
public final static short sid = 0x2D;
+ public AreaNPtg(AreaNPtg other) {
+ super(other);
+ }
+
public AreaNPtg(LittleEndianInput in) {
super(in);
}
@@ -33,4 +37,9 @@ public final class AreaNPtg extends Area
protected byte getSid() {
return sid;
}
+
+ @Override
+ public AreaNPtg copy() {
+ return new AreaNPtg(this);
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaPtg.java Sun Dec 22 21:44:45 2019
@@ -22,7 +22,6 @@ import org.apache.poi.util.LittleEndianI
/**
* Specifies a rectangular area of cells A1:A4 for instance.
- * @author Jason Height (jheight at chariot dot net dot au)
*/
public final class AreaPtg extends Area2DPtgBase {
public final static short sid = 0x25;
@@ -30,17 +29,26 @@ public final class AreaPtg extends Area2
public AreaPtg(int firstRow, int lastRow, int firstColumn, int lastColumn, boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative) {
super(firstRow, lastRow, firstColumn, lastColumn, firstRowRelative, lastRowRelative, firstColRelative, lastColRelative);
}
-
+
+ public AreaPtg(AreaPtg other) {
+ super(other);
+ }
+
public AreaPtg(LittleEndianInput in) {
super(in);
}
-
+
public AreaPtg(AreaReference arearef) {
super(arearef);
}
-
+
@Override
protected byte getSid() {
return sid;
}
+
+ @Override
+ public AreaPtg copy() {
+ return new AreaPtg(this);
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaPtgBase.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaPtgBase.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaPtgBase.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaPtgBase.java Sun Dec 22 21:44:45 2019
@@ -27,17 +27,12 @@ import org.apache.poi.util.LittleEndianO
/**
* Specifies a rectangular area of cells A1:A4 for instance.
- * @author andy
- * @author Jason Height (jheight at chariot dot net dot au)
*/
public abstract class AreaPtgBase extends OperandPtg implements AreaI {
- /**
- * TODO - (May-2008) fix subclasses of AreaPtg 'AreaN~' which are used in shared formulas.
- * see similar comment in ReferencePtg
- */
- protected final RuntimeException notImplemented() {
- return new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
- }
+
+ private final static BitField rowRelative = BitFieldFactory.getInstance(0x8000);
+ private final static BitField colRelative = BitFieldFactory.getInstance(0x4000);
+ private final static BitField columnMask = BitFieldFactory.getInstance(0x3FFF);
/** zero based, unsigned 16 bit */
private int field_1_first_row;
@@ -48,12 +43,14 @@ public abstract class AreaPtgBase extend
/** zero based, unsigned 8 bit */
private int field_4_last_column; //BitFields: (last row relative, last col relative, last column number)
- private final static BitField rowRelative = BitFieldFactory.getInstance(0x8000);
- private final static BitField colRelative = BitFieldFactory.getInstance(0x4000);
- private final static BitField columnMask = BitFieldFactory.getInstance(0x3FFF);
+ protected AreaPtgBase() {}
- protected AreaPtgBase() {
- // do nothing
+ protected AreaPtgBase(AreaPtgBase other) {
+ super(other);
+ field_1_first_row = other.field_1_first_row;
+ field_2_last_row = other.field_2_last_row;
+ field_3_first_column = other.field_3_first_column;
+ field_4_last_column = other.field_4_last_column;
}
protected AreaPtgBase(AreaReference ar) {
@@ -96,11 +93,11 @@ public abstract class AreaPtgBase extend
setLastColRelative(firstColRelative);
}
}
-
+
/**
* Sort the first and last row and columns in-place to the preferred (top left:bottom right) order
* Note: Sort only occurs when an instance is constructed or when this method is called.
- *
+ *
* <p>For example, <code>$E5:B$10</code> becomes <code>B5:$E$10</code></p>
*/
public void sortTopLeftToBottomRight() {
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ArrayPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ArrayPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ArrayPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ArrayPtg.java Sun Dec 22 21:44:45 2019
@@ -31,18 +31,16 @@ import org.apache.poi.util.LittleEndianO
* It is only after the "size" of all the Ptgs is met, that the ArrayPtg data is actually
* held after this. So Ptg.createParsedExpression keeps track of the number of
* ArrayPtg elements and need to parse the data upto the FORMULA record size.
- *
- * @author Jason Height (jheight at chariot dot net dot au)
*/
public final class ArrayPtg extends Ptg {
- public static final byte sid = 0x20;
+ public static final byte sid = 0x20;
private static final int RESERVED_FIELD_LEN = 7;
/**
* The size of the plain tArray token written within the standard formula tokens
* (not including the data which comes after all formula tokens)
*/
- public static final int PLAIN_TOKEN_SIZE = 1+RESERVED_FIELD_LEN;
+ public static final int PLAIN_TOKEN_SIZE = 1 + RESERVED_FIELD_LEN;
// 7 bytes of data (stored as an int, short and byte here)
private final int _reserved0Int;
@@ -50,7 +48,7 @@ public final class ArrayPtg extends Ptg
private final int _reserved2Byte;
// data from these fields comes after the Ptg data of all tokens in current formula
- private final int _nColumns;
+ private final int _nColumns;
private final int _nRows;
private final Object[] _arrayValues;
@@ -62,6 +60,16 @@ public final class ArrayPtg extends Ptg
_nRows = nRows;
_arrayValues = arrayValues.clone();
}
+
+ public ArrayPtg(ArrayPtg other) {
+ _reserved0Int = other._reserved0Int;
+ _reserved1Short = other._reserved1Short;
+ _reserved2Byte = other._reserved2Byte;
+ _nColumns = other._nColumns;
+ _nRows = other._nRows;
+ _arrayValues = (other._arrayValues == null) ? null : other._arrayValues.clone();
+ }
+
/**
* @param values2d array values arranged in rows
*/
@@ -264,5 +272,16 @@ public final class ArrayPtg extends Ptg
result.setClass(getPtgClass());
return result;
}
+
+ @Override
+ public Initial copy() {
+ // immutable
+ return this;
+ }
+ }
+
+ @Override
+ public ArrayPtg copy() {
+ return new ArrayPtg(this);
}
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AttrPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AttrPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AttrPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AttrPtg.java Sun Dec 22 21:44:45 2019
@@ -24,22 +24,13 @@ import org.apache.poi.util.LittleEndianI
import org.apache.poi.util.LittleEndianOutput;
/**
- * "Special Attributes"
+ * "Special Attributes"<p>
* This seems to be a Misc Stuff and Junk record. One function it serves is
* in SUM functions (i.e. SUM(A1:A3) causes an area PTG then an ATTR with the SUM option set)
- * @author andy
- * @author Jason Height (jheight at chariot dot net dot au)
*/
public final class AttrPtg extends ControlPtg {
public final static byte sid = 0x19;
private final static int SIZE = 4;
- private final byte _options;
- private final short _data;
-
- /** only used for tAttrChoose: table of offsets to starts of args */
- private final int[] _jumpTable;
- /** only used for tAttrChoose: offset to the tFuncVar for CHOOSE() */
- private final int _chooseFuncOffset;
// flags 'volatile' and 'space', can be combined.
// OOO spec says other combinations are theoretically possible but not likely to occur.
@@ -74,6 +65,14 @@ public final class AttrPtg extends Contr
public static final int SPACE_AFTER_EQUALITY = 0x06;
}
+ private final byte _options;
+ private final short _data;
+
+ /** only used for tAttrChoose: table of offsets to starts of args */
+ private final int[] _jumpTable;
+ /** only used for tAttrChoose: offset to the tFuncVar for CHOOSE() */
+ private final int _chooseFuncOffset;
+
public AttrPtg(LittleEndianInput in) {
_options = in.readByte();
_data = in.readShort();
@@ -259,4 +258,10 @@ public final class AttrPtg extends Contr
}
return "UNKNOWN ATTRIBUTE";
}
+
+ @Override
+ public AttrPtg copy() {
+ // immutable
+ return this;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/BoolPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/BoolPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/BoolPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/BoolPtg.java Sun Dec 22 21:44:45 2019
@@ -22,10 +22,6 @@ import org.apache.poi.util.LittleEndianO
/**
* Boolean (boolean) Stores a (java) boolean value in a formula.
- *
- * @author Paul Krause (pkrause at soundbite dot com)
- * @author Andrew C. Oliver (acoliver at apache dot org)
- * @author Jason Height (jheight at chariot dot net dot au)
*/
public final class BoolPtg extends ScalarConstantPtg {
public static final int SIZE = 2;
@@ -63,4 +59,9 @@ public final class BoolPtg extends Scala
public String toFormulaString() {
return _value ? "TRUE" : "FALSE";
}
+
+ @Override
+ public BoolPtg copy() {
+ return this;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ConcatPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ConcatPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ConcatPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ConcatPtg.java Sun Dec 22 21:44:45 2019
@@ -17,22 +17,17 @@
package org.apache.poi.ss.formula.ptg;
-/**
- *
- * @author andy
- * @author Jason Height (jheight at chariot dot net dot au)
- */
public final class ConcatPtg extends ValueOperatorPtg {
public final static byte sid = 0x08;
-
+
private final static String CONCAT = "&";
-
- public static final ValueOperatorPtg instance = new ConcatPtg();
+
+ public static final ConcatPtg instance = new ConcatPtg();
private ConcatPtg() {
// enforce singleton
}
-
+
protected byte getSid() {
return sid;
}
@@ -40,7 +35,7 @@ public final class ConcatPtg extends Val
public int getNumberOfOperands() {
return 2;
}
-
+
public String toFormulaString(String[] operands) {
StringBuilder buffer = new StringBuilder();
@@ -49,4 +44,9 @@ public final class ConcatPtg extends Val
buffer.append(operands[ 1 ]);
return buffer.toString();
}
+
+ @Override
+ public ConcatPtg copy() {
+ return instance;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ControlPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ControlPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ControlPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ControlPtg.java Sun Dec 22 21:44:45 2019
@@ -17,18 +17,10 @@
package org.apache.poi.ss.formula.ptg;
-/**
- * Common superclass for
- * tExp
- * tTbl
- * tParen
- * tNlr
- * tAttr
- * tSheet
- * tEndSheet
- */
public abstract class ControlPtg extends Ptg {
+ protected ControlPtg() {}
+
public boolean isBaseToken() {
return true;
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Deleted3DPxg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Deleted3DPxg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Deleted3DPxg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Deleted3DPxg.java Sun Dec 22 21:44:45 2019
@@ -33,6 +33,13 @@ public final class Deleted3DPxg extends
this.externalWorkbookNumber = externalWorkbookNumber;
this.sheetName = sheetName;
}
+
+ public Deleted3DPxg(Deleted3DPxg other) {
+ super(other);
+ externalWorkbookNumber = other.externalWorkbookNumber;
+ sheetName = other.sheetName;
+ }
+
public Deleted3DPxg(String sheetName) {
this(-1, sheetName);
}
@@ -59,7 +66,7 @@ public final class Deleted3DPxg extends
public String getSheetName() {
return sheetName;
}
-
+
public void setSheetName(String sheetName) {
this.sheetName = sheetName;
}
@@ -78,7 +85,7 @@ public final class Deleted3DPxg extends
sb.append(FormulaError.REF.getString());
return sb.toString();
}
-
+
public byte getDefaultOperandClass() {
return Ptg.CLASS_VALUE;
}
@@ -89,4 +96,9 @@ public final class Deleted3DPxg extends
public void write(LittleEndianOutput out) {
throw new IllegalStateException("XSSF-only Ptg, should not be serialised");
}
+
+ @Override
+ public Deleted3DPxg copy() {
+ return new Deleted3DPxg(this);
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/DeletedArea3DPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/DeletedArea3DPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/DeletedArea3DPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/DeletedArea3DPtg.java Sun Dec 22 21:44:45 2019
@@ -24,10 +24,9 @@ import org.apache.poi.util.LittleEndianI
import org.apache.poi.util.LittleEndianOutput;
/**
- * Title: Deleted Area 3D Ptg - 3D referecnce (Sheet + Area)<P>
- * Description: Defined a area in Extern Sheet. <P>
- * REFERENCE: <P>
- * @author Patrick Luby
+ * Deleted Area 3D Ptg - 3D referecnce (Sheet + Area)<p>
+ * Defined a area in Extern Sheet.
+ *
* @version 1.0-pre
*/
public final class DeletedArea3DPtg extends OperandPtg implements WorkbookDependentFormula {
@@ -41,7 +40,7 @@ public final class DeletedArea3DPtg exte
unused1 = 0;
unused2 = 0;
}
-
+
public DeletedArea3DPtg(LittleEndianInput in) {
field_1_index_extern_sheet = in.readUShort();
unused1 = in.readInt();
@@ -65,4 +64,10 @@ public final class DeletedArea3DPtg exte
out.writeInt(unused1);
out.writeInt(unused2);
}
+
+ @Override
+ public DeletedArea3DPtg copy() {
+ // immutable
+ return this;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/DeletedRef3DPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/DeletedRef3DPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/DeletedRef3DPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/DeletedRef3DPtg.java Sun Dec 22 21:44:45 2019
@@ -25,8 +25,9 @@ import org.apache.poi.util.LittleEndianI
import org.apache.poi.util.LittleEndianOutput;
/**
- * Title: Deleted Reference 3D Ptg <P>
- * Description: Defined a cell in extern sheet. <P>
+ * Deleted Reference 3D Ptg<p>
+ * Defined a cell in extern sheet.
+ *
* @since 1.0-pre
*/
public final class DeletedRef3DPtg extends OperandPtg implements WorkbookDependentFormula {
@@ -62,4 +63,10 @@ public final class DeletedRef3DPtg exten
out.writeShort(field_1_index_extern_sheet);
out.writeInt(unused1);
}
+
+ @Override
+ public DeletedRef3DPtg copy() {
+ // immutable
+ return this;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/DividePtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/DividePtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/DividePtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/DividePtg.java Sun Dec 22 21:44:45 2019
@@ -19,18 +19,16 @@ package org.apache.poi.ss.formula.ptg;
/**
* This PTG implements the standard binomial divide "/"
- * @author Andrew C. Oliver acoliver at apache dot org
- * @author Jason Height (jheight at chariot dot net dot au)
*/
public final class DividePtg extends ValueOperatorPtg {
public final static byte sid = 0x06;
- public static final ValueOperatorPtg instance = new DividePtg();
+ public static final DividePtg instance = new DividePtg();
private DividePtg() {
// enforce singleton
}
-
+
protected byte getSid() {
return sid;
}
@@ -46,5 +44,10 @@ public final class DividePtg extends Val
buffer.append("/");
buffer.append(operands[ 1 ]);
return buffer.toString();
- }
+ }
+
+ @Override
+ public DividePtg copy() {
+ return instance;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/EqualPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/EqualPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/EqualPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/EqualPtg.java Sun Dec 22 21:44:45 2019
@@ -24,12 +24,12 @@ package org.apache.poi.ss.formula.ptg;
public final class EqualPtg extends ValueOperatorPtg {
public final static byte sid = 0x0b;
- public static final ValueOperatorPtg instance = new EqualPtg();
+ public static final EqualPtg instance = new EqualPtg();
private EqualPtg() {
// enforce singleton
}
-
+
protected byte getSid() {
return sid;
}
@@ -37,14 +37,19 @@ public final class EqualPtg extends Valu
public int getNumberOfOperands() {
return 2;
}
-
+
public String toFormulaString(String[] operands) {
StringBuilder buffer = new StringBuilder();
-
+
buffer.append(operands[ 0 ]);
buffer.append("=");
buffer.append(operands[ 1 ]);
return buffer.toString();
- }
+ }
+
+ @Override
+ public EqualPtg copy() {
+ return instance;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ErrPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ErrPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ErrPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ErrPtg.java Sun Dec 22 21:44:45 2019
@@ -86,4 +86,9 @@ public final class ErrPtg extends Scalar
throw new RuntimeException("Unexpected error code (" + code + ")");
}
}
+
+ @Override
+ public ErrPtg copy() {
+ return this;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ExpPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ExpPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ExpPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ExpPtg.java Sun Dec 22 21:44:45 2019
@@ -20,15 +20,10 @@ package org.apache.poi.ss.formula.ptg;
import org.apache.poi.util.LittleEndianInput;
import org.apache.poi.util.LittleEndianOutput;
-/**
- *
- * @author andy
- * @author Jason Height (jheight at chariot dot net dot au)
- * @author dmui (save existing implementation)
- */
public final class ExpPtg extends ControlPtg {
private final static int SIZE = 5;
public final static short sid = 0x1;
+
private final int field_1_first_row;
private final int field_2_first_col;
@@ -71,4 +66,9 @@ public final class ExpPtg extends Contro
public String toString() {
return "[Array Formula or Shared Formula]\n" + "row = " + getRow() + "\n" + "col = " + getColumn() + "\n";
}
+
+ @Override
+ public ExpPtg copy() {
+ return this;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/FuncPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/FuncPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/FuncPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/FuncPtg.java Sun Dec 22 21:44:45 2019
@@ -22,11 +22,6 @@ import org.apache.poi.ss.formula.functio
import org.apache.poi.util.LittleEndianInput;
import org.apache.poi.util.LittleEndianOutput;
-/**
- * @author aviks
- * @author Jason Height (jheight at chariot dot net dot au)
- * @author Danny Mui (dmui at apache dot org) (Leftover handling)
- */
public final class FuncPtg extends AbstractFunctionPtg {
public final static byte sid = 0x21;
@@ -57,4 +52,10 @@ public final class FuncPtg extends Abstr
public int getSize() {
return SIZE;
}
+
+ @Override
+ public FuncPtg copy() {
+ // immutable
+ return this;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/FuncVarPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/FuncVarPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/FuncVarPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/FuncVarPtg.java Sun Dec 22 21:44:45 2019
@@ -23,10 +23,7 @@ import org.apache.poi.util.BitFieldFacto
import org.apache.poi.util.LittleEndianInput;
import org.apache.poi.util.LittleEndianOutput;
-/**
- * @author Jason Height (jheight at chariot dot net dot au)
- */
-public final class FuncVarPtg extends AbstractFunctionPtg{
+public final class FuncVarPtg extends AbstractFunctionPtg {
public final static byte sid = 0x22;
private final static int SIZE = 4;
@@ -90,4 +87,10 @@ public final class FuncVarPtg extends Ab
public int getSize() {
return SIZE;
}
+
+ @Override
+ public FuncVarPtg copy() {
+ // immutable
+ return this;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/GreaterEqualPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/GreaterEqualPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/GreaterEqualPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/GreaterEqualPtg.java Sun Dec 22 21:44:45 2019
@@ -20,19 +20,17 @@ package org.apache.poi.ss.formula.ptg;
/**
* PTG class to implement greater or equal to
- *
- * @author fred at stsci dot edu
*/
public final class GreaterEqualPtg extends ValueOperatorPtg {
public final static int SIZE = 1;
public final static byte sid = 0x0c;
- public static final ValueOperatorPtg instance = new GreaterEqualPtg();
+ public static final GreaterEqualPtg instance = new GreaterEqualPtg();
private GreaterEqualPtg() {
// enforce singleton
}
-
+
protected byte getSid() {
return sid;
}
@@ -51,4 +49,9 @@ public final class GreaterEqualPtg exten
return buffer.toString();
}
+
+ @Override
+ public GreaterEqualPtg copy() {
+ return instance;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/GreaterThanPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/GreaterThanPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/GreaterThanPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/GreaterThanPtg.java Sun Dec 22 21:44:45 2019
@@ -20,18 +20,17 @@ package org.apache.poi.ss.formula.ptg;
/**
* Greater than operator PTG ">"
- * @author Cameron Riley (criley at ekmail.com)
*/
public final class GreaterThanPtg extends ValueOperatorPtg {
- public final static byte sid = 0x0D;
+ public final static byte sid = 0x0D;
private final static String GREATERTHAN = ">";
- public static final ValueOperatorPtg instance = new GreaterThanPtg();
+ public static final GreaterThanPtg instance = new GreaterThanPtg();
private GreaterThanPtg() {
// enforce singleton
}
-
+
protected byte getSid() {
return sid;
}
@@ -43,13 +42,13 @@ public final class GreaterThanPtg extend
public int getNumberOfOperands() {
return 2;
}
-
- /**
+
+ /**
* Implementation of method from OperationsPtg
* @param operands a String array of operands
* @return String the Formula as a String
- */
- public String toFormulaString(String[] operands)
+ */
+ public String toFormulaString(String[] operands)
{
StringBuilder buffer = new StringBuilder();
@@ -58,4 +57,9 @@ public final class GreaterThanPtg extend
buffer.append(operands[ 1 ]);
return buffer.toString();
}
+
+ @Override
+ public GreaterThanPtg copy() {
+ return instance;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/IntPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/IntPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/IntPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/IntPtg.java Sun Dec 22 21:44:45 2019
@@ -21,11 +21,7 @@ import org.apache.poi.util.LittleEndianI
import org.apache.poi.util.LittleEndianOutput;
/**
- * Integer (unsigned short integer) Stores an unsigned short value (java int) in
- * a formula
- *
- * @author Andrew C. Oliver (acoliver at apache dot org)
- * @author Jason Height (jheight at chariot dot net dot au)
+ * Integer (unsigned short integer) Stores an unsigned short value (java int) in a formula
*/
public final class IntPtg extends ScalarConstantPtg {
// 16 bit unsigned integer
@@ -34,8 +30,8 @@ public final class IntPtg extends Scalar
/**
* Excel represents integers 0..65535 with the tInt token.
- *
- * @return <code>true</code> if the specified value is within the range of values
+ *
+ * @return <code>true</code> if the specified value is within the range of values
* <tt>IntPtg</tt> can represent.
*/
public static boolean isInRange(int i) {
@@ -73,4 +69,9 @@ public final class IntPtg extends Scalar
public String toFormulaString() {
return String.valueOf(getValue());
}
+
+ @Override
+ public IntPtg copy() {
+ return this;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/IntersectionPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/IntersectionPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/IntersectionPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/IntersectionPtg.java Sun Dec 22 21:44:45 2019
@@ -19,13 +19,10 @@ package org.apache.poi.ss.formula.ptg;
import org.apache.poi.util.LittleEndianOutput;
-/**
- * @author Daniel Noll (daniel at nuix dot com dot au)
- */
public final class IntersectionPtg extends OperationPtg {
public final static byte sid = 0x0f;
- public static final OperationPtg instance = new IntersectionPtg();
+ public static final IntersectionPtg instance = new IntersectionPtg();
private IntersectionPtg() {
// enforce singleton
@@ -59,4 +56,9 @@ public final class IntersectionPtg exten
public int getNumberOfOperands() {
return 2;
}
+
+ @Override
+ public IntersectionPtg copy() {
+ return instance;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/LessEqualPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/LessEqualPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/LessEqualPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/LessEqualPtg.java Sun Dec 22 21:44:45 2019
@@ -1,4 +1,4 @@
-
+
/* ====================================================================
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
@@ -23,18 +23,16 @@ package org.apache.poi.ss.formula.ptg;
/**
* Ptg class to implement less than or equal
- *
- * @author fred at stsci dot edu
*/
public final class LessEqualPtg extends ValueOperatorPtg {
public final static byte sid = 0x0a;
- public static final ValueOperatorPtg instance = new LessEqualPtg();
+ public static final LessEqualPtg instance = new LessEqualPtg();
private LessEqualPtg() {
// enforce singleton
}
-
+
protected byte getSid() {
return sid;
}
@@ -50,4 +48,9 @@ public final class LessEqualPtg extends
buffer.append( operands[1] );
return buffer.toString();
}
+
+ @Override
+ public LessEqualPtg copy() {
+ return instance;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/LessThanPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/LessThanPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/LessThanPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/LessThanPtg.java Sun Dec 22 21:44:45 2019
@@ -18,24 +18,23 @@
package org.apache.poi.ss.formula.ptg;
/**
- * Less than operator PTG "<". The SID is taken from the
+ * Less than operator PTG "<". The SID is taken from the
* Openoffice.orgs Documentation of the Excel File Format,
* Table 3.5.7
- * @author Cameron Riley (criley at ekmail.com)
*/
public final class LessThanPtg extends ValueOperatorPtg {
/** the sid for the less than operator as hex */
- public final static byte sid = 0x09;
+ public final static byte sid = 0x09;
/** identifier for LESS THAN char */
private final static String LESSTHAN = "<";
- public static final ValueOperatorPtg instance = new LessThanPtg();
+ public static final LessThanPtg instance = new LessThanPtg();
private LessThanPtg() {
// enforce singleton
}
-
+
protected byte getSid() {
return sid;
}
@@ -47,13 +46,13 @@ public final class LessThanPtg extends V
public int getNumberOfOperands() {
return 2;
}
-
- /**
+
+ /**
* Implementation of method from OperationsPtg
* @param operands a String array of operands
* @return String the Formula as a String
- */
- public String toFormulaString(String[] operands)
+ */
+ public String toFormulaString(String[] operands)
{
StringBuilder buffer = new StringBuilder();
buffer.append(operands[ 0 ]);
@@ -61,4 +60,9 @@ public final class LessThanPtg extends V
buffer.append(operands[ 1 ]);
return buffer.toString();
}
+
+ @Override
+ public LessThanPtg copy() {
+ return instance;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemAreaPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemAreaPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemAreaPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemAreaPtg.java Sun Dec 22 21:44:45 2019
@@ -20,9 +20,6 @@ package org.apache.poi.ss.formula.ptg;
import org.apache.poi.util.LittleEndianInput;
import org.apache.poi.util.LittleEndianOutput;
-/**
- * @author Daniel Noll (daniel at nuix dot com dot au)
- */
public final class MemAreaPtg extends OperandPtg {
public final static short sid = 0x26;
private final static int SIZE = 7;
@@ -71,4 +68,10 @@ public final class MemAreaPtg extends Op
sb.append("]");
return sb.toString();
}
+
+ @Override
+ public MemAreaPtg copy() {
+ // immutable
+ return this;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemErrPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemErrPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemErrPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemErrPtg.java Sun Dec 22 21:44:45 2019
@@ -20,18 +20,18 @@ package org.apache.poi.ss.formula.ptg;
import org.apache.poi.util.LittleEndianInput;
import org.apache.poi.util.LittleEndianOutput;
-/**
- *
- * @author andy
- * @author Jason Height (jheight at chariot dot net dot au)
- * @author Daniel Noll (daniel at nuix dot com dot au)
- */
public final class MemErrPtg extends OperandPtg {
public final static short sid = 0x27;
private final static int SIZE = 7;
private int field_1_reserved;
private short field_2_subex_len;
+ public MemErrPtg(MemErrPtg other) {
+ super(other);
+ field_1_reserved = other.field_1_reserved;
+ field_2_subex_len = other.field_2_subex_len;
+ }
+
public MemErrPtg(LittleEndianInput in) {
field_1_reserved = in.readInt();
field_2_subex_len = in.readShort();
@@ -54,4 +54,9 @@ public final class MemErrPtg extends Ope
public byte getDefaultOperandClass() {
return Ptg.CLASS_VALUE;
}
+
+ @Override
+ public MemErrPtg copy() {
+ return new MemErrPtg(this);
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemFuncPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemFuncPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemFuncPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemFuncPtg.java Sun Dec 22 21:44:45 2019
@@ -20,9 +20,6 @@ package org.apache.poi.ss.formula.ptg;
import org.apache.poi.util.LittleEndianInput;
import org.apache.poi.util.LittleEndianOutput;
-/**
- * @author Glen Stampoultzis (glens at apache.org)
- */
public final class MemFuncPtg extends OperandPtg {
public final static byte sid = 0x29;
@@ -72,4 +69,10 @@ public final class MemFuncPtg extends Op
sb.append("]");
return sb.toString();
}
+
+ @Override
+ public MemFuncPtg copy() {
+ // immutable
+ return this;
+ }
}
\ No newline at end of file
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MissingArgPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MissingArgPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MissingArgPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MissingArgPtg.java Sun Dec 22 21:44:45 2019
@@ -21,10 +21,6 @@ import org.apache.poi.util.LittleEndianO
/**
* Missing Function Arguments
- *
- * Avik Sengupta <avik at apache.org>
- *
- * @author Jason Height (jheight at chariot dot net dot au)
*/
public final class MissingArgPtg extends ScalarConstantPtg {
@@ -48,4 +44,9 @@ public final class MissingArgPtg extends
public String toFormulaString() {
return " ";
}
+
+ @Override
+ public MissingArgPtg copy() {
+ return this;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MultiplyPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MultiplyPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MultiplyPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MultiplyPtg.java Sun Dec 22 21:44:45 2019
@@ -18,19 +18,17 @@
package org.apache.poi.ss.formula.ptg;
/**
- * Implements the standard mathmatical multiplication - *
- * @author Andrew C. Oliver (acoliver at apache dot org)
- * @author Jason Height (jheight at chariot dot net dot au)
+ * Implements the standard mathematical multiplication "*"
*/
public final class MultiplyPtg extends ValueOperatorPtg {
public final static byte sid = 0x05;
- public static final ValueOperatorPtg instance = new MultiplyPtg();
+ public static final MultiplyPtg instance = new MultiplyPtg();
private MultiplyPtg() {
// enforce singleton
}
-
+
protected byte getSid() {
return sid;
}
@@ -38,7 +36,7 @@ public final class MultiplyPtg extends V
public int getNumberOfOperands() {
return 2;
}
-
+
public String toFormulaString(String[] operands) {
StringBuilder buffer = new StringBuilder();
@@ -46,5 +44,10 @@ public final class MultiplyPtg extends V
buffer.append("*");
buffer.append(operands[ 1 ]);
return buffer.toString();
- }
+ }
+
+ @Override
+ public MultiplyPtg copy() {
+ return instance;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NamePtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NamePtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NamePtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NamePtg.java Sun Dec 22 21:44:45 2019
@@ -24,13 +24,11 @@ import org.apache.poi.util.LittleEndianO
/**
* See the spec at 2.5.198.76 PtgName
- *
- * @author andy
- * @author Jason Height (jheight at chariot dot net dot au)
*/
public final class NamePtg extends OperandPtg implements WorkbookDependentFormula {
public final static short sid = 0x23;
private final static int SIZE = 5;
+
/** one-based index to defined name record */
private int field_1_label_index;
private short field_2_zero; // reserved must be 0
@@ -42,6 +40,12 @@ public final class NamePtg extends Opera
field_1_label_index = 1 + nameIndex; // convert to 1-based
}
+ public NamePtg(NamePtg other) {
+ super(other);
+ field_1_label_index = other.field_1_label_index;
+ field_2_zero = other.field_2_zero;
+ }
+
/** Creates new NamePtg */
public NamePtg(LittleEndianInput in) {
field_1_label_index = in.readUShort();
@@ -81,4 +85,9 @@ public final class NamePtg extends Opera
public byte getDefaultOperandClass() {
return Ptg.CLASS_REF;
}
+
+ @Override
+ public NamePtg copy() {
+ return new NamePtg(this);
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPtg.java Sun Dec 22 21:44:45 2019
@@ -25,7 +25,7 @@ import org.apache.poi.util.LittleEndianO
/**
* A Name, be that a Named Range or a Function / User Defined
* Function, addressed in the HSSF External Sheet style.
- *
+ *
* <p>This is HSSF only, as it matches the HSSF file format way of
* referring to the sheet by an extern index. The XSSF equivalent
* is {@link NameXPxg}
@@ -77,12 +77,12 @@ public final class NameXPtg extends Oper
public String toFormulaString() {
throw new RuntimeException("3D references need a workbook to determine formula text");
}
-
+
public String toString(){
return "NameXPtg:[sheetRefIndex:" + _sheetRefIndex +
" , nameNumber:" + _nameNumber + "]";
}
-
+
public byte getDefaultOperandClass() {
return Ptg.CLASS_VALUE;
}
@@ -93,4 +93,10 @@ public final class NameXPtg extends Oper
public int getNameIndex() {
return _nameNumber - 1;
}
+
+ @Override
+ public NameXPtg copy() {
+ // immutable
+ return this;
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPxg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPxg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPxg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPxg.java Sun Dec 22 21:44:45 2019
@@ -23,7 +23,7 @@ import org.apache.poi.util.LittleEndianO
/**
* A Name, be that a Named Range or a Function / User Defined
* Function, addressed in the HSSF External Sheet style.
- *
+ *
* <p>This is XSSF only, as it stores the sheet / book references
* in String form. The HSSF equivalent using indexes is {@link NameXPtg}</p>
*/
@@ -37,6 +37,14 @@ public final class NameXPxg extends Oper
this.sheetName = sheetName;
this.nameName = nameName;
}
+
+ public NameXPxg(NameXPxg other) {
+ super(other);
+ externalWorkbookNumber = other.externalWorkbookNumber;
+ sheetName = other.sheetName;
+ nameName = other.nameName;
+ }
+
public NameXPxg(String sheetName, String nameName) {
this(-1, sheetName, nameName);
}
@@ -70,7 +78,7 @@ public final class NameXPxg extends Oper
public String getNameName() {
return nameName;
}
-
+
public void setSheetName(String sheetName) {
this.sheetName = sheetName;
}
@@ -94,7 +102,7 @@ public final class NameXPxg extends Oper
sb.append(nameName);
return sb.toString();
}
-
+
public byte getDefaultOperandClass() {
return Ptg.CLASS_VALUE;
}
@@ -105,4 +113,9 @@ public final class NameXPxg extends Oper
public void write(LittleEndianOutput out) {
throw new IllegalStateException("XSSF-only Ptg, should not be serialised");
}
+
+ @Override
+ public NameXPxg copy() {
+ return new NameXPxg(this);
+ }
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NotEqualPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NotEqualPtg.java?rev=1871911&r1=1871910&r2=1871911&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NotEqualPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NotEqualPtg.java Sun Dec 22 21:44:45 2019
@@ -19,18 +19,16 @@ package org.apache.poi.ss.formula.ptg;
/**
* Ptg class to implement not equal
- *
- * @author fred at stsci dot edu
*/
public final class NotEqualPtg extends ValueOperatorPtg {
public final static byte sid = 0x0e;
- public static final ValueOperatorPtg instance = new NotEqualPtg();
+ public static final NotEqualPtg instance = new NotEqualPtg();
private NotEqualPtg() {
// enforce singleton
}
-
+
protected byte getSid() {
return sid;
}
@@ -49,4 +47,9 @@ public final class NotEqualPtg extends V
return buffer.toString();
}
+
+ @Override
+ public NotEqualPtg copy() {
+ return instance;
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org