package com.c2kernel.collection; import java.util.StringTokenizer; import java.util.UUID; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.proxy.ItemProxy; import com.c2kernel.lookup.ItemPath; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.process.Gateway; import com.c2kernel.property.Property; import com.c2kernel.utils.CastorHashMap; import com.c2kernel.utils.KeyValuePair; import com.c2kernel.utils.Logger; /** * @version $Revision: 1.10 $ $Date: 2004/10/21 08:02:23 $ * @author $Author: abranson $ */ public class DependencyMember implements CollectionMember { private ItemPath mItemPath = null; private ItemProxy mItem = null; private int mId = -1; private CastorHashMap mProperties = null; private String mClassProps; /************************************************************************** * **************************************************************************/ public DependencyMember() { mProperties = new CastorHashMap(); } @Override public void setItemPath(ItemPath itemPath) { mItemPath = itemPath; mItem = null; } @Override public ItemPath getItemPath() { return mItemPath; } @Override public void setProperties(CastorHashMap props) { mProperties = props; } @Override public CastorHashMap getProperties() { return mProperties; } public KeyValuePair[] getKeyValuePairs() { return mProperties.getKeyValuePairs(); } public void setKeyValuePairs(KeyValuePair[] pairs) { mProperties.setKeyValuePairs(pairs); } @Override public int getID() { return mId; } @Override public void setID(int id) { mId = id; } @Override public void setClassProps(String props) { mClassProps = props; } @Override public String getClassProps() { return mClassProps; } @Override public void assignItem(ItemPath itemPath) throws MembershipException { if (itemPath != null) { if (mClassProps == null || getProperties() == null) throw new MembershipException("ClassProps not yet set. Cannot check membership validity."); //for each mandatory prop check if its in the member property and has the matching value StringTokenizer sub = new StringTokenizer(mClassProps, ","); while (sub.hasMoreTokens()) { String aClassProp = sub.nextToken(); try { String memberValue = (String)getProperties().get(aClassProp); Property ItemProperty = (Property)Gateway.getStorage().get(itemPath, ClusterStorage.PROPERTY+"/"+aClassProp, null); if (ItemProperty == null) throw new MembershipException("Property "+aClassProp+ " does not exist for item " + itemPath ); if (!ItemProperty.getValue().equalsIgnoreCase(memberValue)) throw new MembershipException("DependencyMember::checkProperty() Values of mandatory prop "+aClassProp+" do not match " + ItemProperty.getValue()+"!="+memberValue); } catch (Exception ex) { Logger.error(ex); throw new MembershipException("Error checking properties"); } } } mItemPath = itemPath; mItem = null; } @Override public void clearItem() { mItemPath = null; mItem = null; } @Override public ItemProxy resolveItem() throws ObjectNotFoundException { if (mItem == null && mItemPath != null) mItem = Gateway.getProxyManager().getProxy(mItemPath); return mItem; } @Override public void setChildUUID(String uuid) throws MembershipException { mItemPath = new ItemPath(UUID.fromString(uuid)); } @Override public String getChildUUID() { return mItemPath.getUUID().toString(); } }