]> source.dussan.org Git - poi.git/commitdiff
Writing preparations
authorRainer Klute <klute@apache.org>
Sun, 3 Aug 2003 20:16:46 +0000 (20:16 +0000)
committerRainer Klute <klute@apache.org>
Sun, 3 Aug 2003 20:16:46 +0000 (20:16 +0000)
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353285 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hpsf/ClassID.java
src/java/org/apache/poi/hpsf/Property.java
src/java/org/apache/poi/hpsf/PropertySet.java
src/java/org/apache/poi/hpsf/Section.java
src/java/org/apache/poi/hpsf/Util.java

index 1aff51b9b818721e1f0e531b2722624af8d6c99d..898364fce3796bc2c8931db41076546b560e0652 100644 (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;
+    }
+
 }
index b6d92ebeb27b80c061909d093de0c0527ee0b605..227f69d1634edad55a8fbfd2f8856c181cfb4464 100644 (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.");
+    }
+
 }
index a0b2f9bc3a29ad963133d1c0c57780cd7f256d7a..a039ff9bc0249cd1d3e022d4ec08c6efaa7f1ae2 100644 (file)
  */
 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());
+    }
+
 }
index bd8bcf0d6f5e725962330741503ecc1674c9eb83..abeed3a7cdc588eaf5bd45b061f987f0d9e07f1d 100644 (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());
+    }
+
 }
index 00182e225954e55d7fd4147e81f7d9eb81525060..4a92633d0b09a5bf72cfb3a7858380b89b6b04da 100644 (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;
+    }
+
 }