package com.c2kernel.collection; import java.util.Iterator; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.C2KLocalObject; import com.c2kernel.lookup.ItemPath; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.utils.CastorHashMap; /** * @version $Revision: 1.23 $ $Date: 2004/05/14 15:39:39 $ * @author $Author: abranson $ */ abstract public class Collection implements C2KLocalObject { public static final short EMPTY = -1; private int mCounter = -1; // Contains next available Member ID protected CollectionMemberList mMembers = new CollectionMemberList(); protected int mID = -1; protected String mName = ""; // Not checked for uniqueness protected Integer mVersion = null; public int getCounter() { if (mCounter == -1) for (Object name : mMembers.list) { CollectionMember element = (CollectionMember)name; if (mCounter < element.getID()) mCounter = element.getID(); } return ++mCounter; } public void setCounter(int count) { mCounter = count; } public int size() { return mMembers.list.size(); } public void setID(int id) { mID = id; } public int getID() { return mID; } @Override public void setName(String name) { mName = name; } @Override public String getName() { return mName; } public Integer getVersion() { return mVersion; } public void setVersion(Integer mVersion) { this.mVersion = mVersion; } public String getVersionName() { return mVersion==null?"last":String.valueOf(mVersion); } @Override public String getClusterType() { return ClusterStorage.COLLECTION; } public void setMembers(CollectionMemberList newMembers) { mMembers = newMembers; } public boolean contains(ItemPath itemPath) { for (Object name : mMembers.list) { CollectionMember element = (CollectionMember)name; if (element.getItemPath().equals(itemPath)) return true; } return false; } public boolean isFull() { for (int i=0; i getMembers() { return mMembers; } public abstract E addMember(ItemPath itemPath, CastorHashMap props, String classProps) throws MembershipException; public abstract E addMember(ItemPath itemPath) throws MembershipException; public abstract void removeMember(int memberId) throws MembershipException; @Override public boolean equals(Object other) { if (!(other instanceof Collection)) return false; Collection otherColl = (Collection)other; boolean same = mName.equals(otherColl.getName()) && size() == otherColl.size(); if (!same) return false; for (Iterator i = getMembers().list.iterator(); i.hasNext();) { try { CollectionMember thisMem = i.next(); CollectionMember otherMem = otherColl.getMember(thisMem.getID()); if (!thisMem.equals(otherMem)) return false; } catch (ObjectNotFoundException ex) { return false; } } return true; } }