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

        Object[] data = (Object[]) ev.get_data();
        if (data == null) {
            return;
        }

        String filename = (String) data[0];         // get name
        Integer sender = (Integer) data[1];         // get destination
        // if our catalogue contains the file, we immediately send it back
        Object[] dataTemp = new Object[2];
        dataTemp[0] = filename;

        /**** // DEBUG
        System.out.println(super.get_name() + ".processGetReplica(): for " +
           filename + " from " + GridSim.getEntityName(sender.intValue()));
        ****/

        ArrayList list = (ArrayList) catalogueHash_.get(filename);
        if (list != null)
        {
            dataTemp[1] = (Integer) list.get(0);
            super.send(super.output, 0, DataGridTags.CTLG_REPLICA_DELIVERY,
                new IO_data(dataTemp,Link.DEFAULT_MTU,sender.intValue()) );
        }
        else
        {
            dataTemp[1] = senderID_;
            waitingReplicaRequest_.add(data);
            super.send(super.output, 0, DataGridTags.CTLG_GET_REPLICA,
                new IO_data(dataTemp, Link.DEFAULT_MTU, getHigherLevelRCid()) );
        }
    }