Writing preparations

git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353285 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Rainer Klute 2003-08-03 20:16:46 +00:00
parent 5c7551531b
commit 5819887172
5 changed files with 168 additions and 6 deletions

View File

@ -205,4 +205,27 @@ public class ClassID
dst[i + offset] = bytes[i]; 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;
}
} }

View File

@ -100,7 +100,7 @@ public class Property
private static final int CP_UNICODE = 1200; private static final int CP_UNICODE = 1200;
/** <p>The property's ID.</p> */ /** <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> */ /** <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> */ /** <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> * <p>Reads a dictionary.</p>
* *
@ -275,4 +284,11 @@ public class Property
throw new UnsupportedOperationException("FIXME: Not yet implemented."); throw new UnsupportedOperationException("FIXME: Not yet implemented.");
} }
public boolean equals(Object o)
{
throw new UnsupportedOperationException("FIXME: Not yet implemented.");
}
} }

View File

@ -54,10 +54,12 @@
*/ */
package org.apache.poi.hpsf; package org.apache.poi.hpsf;
import java.io.InputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.apache.poi.hpsf.wellknown.SectionIDMap; import org.apache.poi.hpsf.wellknown.SectionIDMap;
import org.apache.poi.util.LittleEndian; import org.apache.poi.util.LittleEndian;
@ -636,4 +638,38 @@ public class PropertySet
return ((Section) sections.get(0)); 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());
}
} }

View File

@ -138,7 +138,7 @@ public class Section
/** /**
* @see #getPropertyCount * @see #getPropertyCount
*/ */
protected int propertyCount; private int propertyCount;
/** /**
@ -156,7 +156,7 @@ public class Section
/** /**
* @see #getProperties * @see #getProperties
*/ */
protected Property[] properties; private Property[] properties;
/** /**
@ -169,6 +169,16 @@ public class Section
return properties; 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; 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());
}
} }

View File

@ -54,6 +54,7 @@
*/ */
package org.apache.poi.hpsf; package org.apache.poi.hpsf;
import java.util.Collection;
import java.util.Date; import java.util.Date;
/** /**
@ -190,4 +191,59 @@ public class Util
return new Date(ms_since_19700101); 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;
}
} }