Browse Source

Writing preparations


git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353285 13f79535-47bb-0310-9956-ffa450edef68
tags/PERF_BEFORE_MERGE
Rainer Klute 21 years ago
parent
commit
73e9bc7c93

+ 23
- 0
src/java/org/apache/poi/hpsf/ClassID.java View File

@@ -205,4 +205,27 @@ public class ClassID
dst[i + offset] = bytes[i];
}



/**
* <p>Checks whether this <code>ClassID</code> is equal to another
* object.</p>
*
* @param o the object to compare this <code>PropertySet</code> with
* @return <code>true</code> if the objects are equal, else
* <code>false</code>.</p>
*/
public boolean equals(final Object o)
{
if (o == null || !(o instanceof ClassID))
return false;
final ClassID cid = (ClassID) o;
if (bytes.length != cid.bytes.length)
return false;
for (int i = 0; i < bytes.length; i++)
if (bytes[i] != cid.bytes[i])
return false;
return true;
}

}

+ 19
- 3
src/java/org/apache/poi/hpsf/Property.java View File

@@ -100,7 +100,7 @@ public class Property
private static final int CP_UNICODE = 1200;

/** <p>The property's ID.</p> */
private int id;
protected int id;


/**
@@ -116,7 +116,7 @@ public class Property


/** <p>The property's type.</p> */
private long type;
protected long type;


/**
@@ -132,7 +132,7 @@ public class Property


/** <p>The property's value.</p> */
private Object value;
protected Object value;


/**
@@ -191,6 +191,15 @@ public class Property



/**
* <p>Creates an empty property. It must be filled using the set method to
* be usable.</p>
*/
protected Property()
{}



/**
* <p>Reads a dictionary.</p>
*
@@ -275,4 +284,11 @@ public class Property
throw new UnsupportedOperationException("FIXME: Not yet implemented.");
}



public boolean equals(Object o)
{
throw new UnsupportedOperationException("FIXME: Not yet implemented.");
}

}

+ 37
- 1
src/java/org/apache/poi/hpsf/PropertySet.java View File

@@ -54,10 +54,12 @@
*/
package org.apache.poi.hpsf;

import java.io.InputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import org.apache.poi.hpsf.wellknown.SectionIDMap;
import org.apache.poi.util.LittleEndian;

@@ -636,4 +638,38 @@ public class PropertySet
return ((Section) sections.get(0));
}



/**
* <p>Returns <code>true</code> if the <code>PropertySet</code> is equal
* to the specified parameter, else <code>false</code>.</p>
*
* @param o the object to compare this <code>PropertySet</code> with
*/
public boolean equals(final Object o)
{
if (o == null || !(o instanceof PropertySet))
return false;
final PropertySet ps = (PropertySet) o;
int byteOrder1 = ps.getByteOrder();
int byteOrder2 = getByteOrder();
ClassID classId1 = ps.getClassID();
ClassID classID2 = getClassID();
int format1 = ps.getFormat();
int format2 = getFormat();
int osVersion1 = ps.getOSVersion();
int osVersion2 = getOSVersion();
int sectionCount1 = ps.getSectionCount();
int sectionCount2 = getSectionCount();
if (byteOrder1 != byteOrder2 ||
!classId1.equals(classID2) ||
format1 != format2 ||
osVersion1 != osVersion2 ||
sectionCount1 != sectionCount2)
return false;

/* Compare the sections: */
return Util.equals(getSections(), ps.getSections());
}

}

+ 33
- 2
src/java/org/apache/poi/hpsf/Section.java View File

@@ -138,7 +138,7 @@ public class Section
/**
* @see #getPropertyCount
*/
protected int propertyCount;
private int propertyCount;


/**
@@ -156,7 +156,7 @@ public class Section
/**
* @see #getProperties
*/
protected Property[] properties;
private Property[] properties;


/**
@@ -169,6 +169,16 @@ public class Section
return properties;
}

/**
* <p>Sets this section's properties.</p>
*
* @param properties This section's new properties.
*/
protected void setProperties(final Property[] properties)
{
this.properties = properties;
}



/**
@@ -423,4 +433,25 @@ public class Section
return s;
}



/**
* <p>Checks whether this section is equal to another object.</p>
*
* @param o The object to cpmpare this section with
* @return <code>true</code> if the objects are equal, <code>false</code> if
* not
*/
public boolean equals(final Object o)
{
if (o == null || !(o instanceof Section))
return false;
final Section s = (Section) o;
if (!s.getFormatID().equals(getFormatID()))
return false;
if (s.getPropertyCount() != getPropertyCount())
return false;
return Util.equals(s.getProperties(), getProperties());
}

}

+ 56
- 0
src/java/org/apache/poi/hpsf/Util.java View File

@@ -54,6 +54,7 @@
*/
package org.apache.poi.hpsf;

import java.util.Collection;
import java.util.Date;

/**
@@ -190,4 +191,59 @@ public class Util
return new Date(ms_since_19700101);
}



/**
* <p>Checks whether two collections are equal. Two collections
* C<sub>1</sub> and C<sub>2</sub> are equal, if the following conditions
* are true:</p>
*
* <ul>
*
* <li><p>For each c<sub>1<em>i</em></sub> (element of C<sub>1</sub>) there
* is a c<sub>2<em>j</em></sub> (element of C<sub>2</sub>), and
* c<sub>1<em>i</em></sub> equals c<sub>2<em>j</em></sub>.</p></li>
*
* <li><p>For each c<sub>2<em>i</em></sub> (element of C<sub>2</sub>) there
* is a c<sub>1<em>j</em></sub> (element of C<sub>1</sub>) and
* c<sub>2<em>i</em></sub> equals c<sub>1<em>j</em></sub>.</p></li>
*
* </ul>
*
* @param c1 the first collection
* @param c2 the second collection
* @return <code>true</code> if the collections are equal, else
* <code>false</code>.
*/
public static boolean equals(final Collection c1, final Collection c2)
{
final Object[] o1 = c1.toArray();
final Object[] o2 = c2.toArray();
return internalEquals(o1, o2);
}

public static boolean equals(final Object[] c1, final Object[] c2)
{
final Object[] o1 = (Object[]) c1.clone();
final Object[] o2 = (Object[]) c2.clone();
return internalEquals(o1, o2);
}

private static boolean internalEquals(final Object[] o1, final Object[] o2)
{
for (int i1 = 0; i1 < o1.length; i1++)
{
boolean matchFound = false;
for (int i2 = 0; !matchFound && i2 < o1.length; i2++)
if (o1[i1].equals(o2[i2]))
{
matchFound = true;
o2[i2] = null;
}
if (!matchFound)
return false;
}
return true;
}

}

Loading…
Cancel
Save