private void processAddReplica(Sim_event ev)
    {
        if (ev == null) {
            return;
        }

        Object[] obj = (Object[]) ev.get_data();
        if (obj == null)
        {
            System.out.println(super.get_name() +
                    ".processAddReplica(): replica is null");
            return;
        }

        String name = (String) obj[0];      // get file name
        Integer resID = (Integer) obj[1];   // get resource id

        int msgTag = DataGridTags.CTLG_ADD_REPLICA_SUCCESSFUL;
        try
        {
            // this RC doesn't have the replica
            // the registration has to be sent to the higher RC
            if (!catalogueHash_.containsKey(name))
            {
                int eventTag = DataGridTags.CTLG_ADD_REPLICA;
                sendMessageToHighLevelRC(name, eventTag);

                // add this event to the list of waiting registrations
                if (waitingReplicaAddAck_ == null) {
                    waitingReplicaAddAck_ = new ArrayList();
                }

                waitingReplicaAddAck_.add(obj);
            }
            // if already registered to the higher level, we just add the new
            // location to the catalogue and send the acknowledge to the user
            else
            {
                ArrayList list = (ArrayList) catalogueHash_.get(name);
                list.add(resID);
                sendMessage(name, DataGridTags.CTLG_ADD_REPLICA_RESULT,
                            msgTag, resID.intValue() );
            }
        }
        catch (Exception e)
        {
            System.out.println(super.get_name() +
                ".processAddReplica(): exception error");
        }

    }