/* * Copyright (c) 2009-2011 by Bjoern Kolbeck, * Zuse Institute Berlin * * Licensed under the BSD License, see LICENSE file for details. * */ package org.xtreemfs.dir.operations; import org.xtreemfs.babudb.api.database.Database; import org.xtreemfs.babudb.api.exception.BabuDBException; import org.xtreemfs.dir.DIRRequest; import org.xtreemfs.dir.DIRRequestDispatcher; import org.xtreemfs.dir.data.ServiceRecord; import org.xtreemfs.foundation.buffer.ReusableBuffer; import org.xtreemfs.pbrpc.generatedinterfaces.DIR.ServiceSet; import org.xtreemfs.pbrpc.generatedinterfaces.DIR.serviceGetByUUIDRequest; import org.xtreemfs.pbrpc.generatedinterfaces.DIRServiceConstants; import com.google.protobuf.Message; /** * * @author bjko */ public class GetServiceByUuidOperation extends DIROperation { private final Database database; public GetServiceByUuidOperation(DIRRequestDispatcher master) throws BabuDBException { super(master); database = master.getDirDatabase(); } @Override public int getProcedureId() { return DIRServiceConstants.PROC_ID_XTREEMFS_SERVICE_GET_BY_UUID; } @Override public void startRequest(DIRRequest rq) { serviceGetByUUIDRequest request = (serviceGetByUUIDRequest) rq.getRequestMessage(); database.lookup(DIRRequestDispatcher.INDEX_ID_SERVREG, request.getName().getBytes(), rq).registerListener( new DBRequestListener<byte[], ServiceSet>(true) { @Override ServiceSet execute(byte[] result, DIRRequest rq) throws Exception { ServiceSet.Builder services = ServiceSet.newBuilder(); if (result != null) { ServiceRecord dbData = new ServiceRecord(ReusableBuffer.wrap(result)); services.addServices(dbData.getService()); } return services.build(); } }); } @Override public boolean isAuthRequired() { return false; } @Override protected Message getRequestMessagePrototype() { return serviceGetByUUIDRequest.getDefaultInstance(); } /* * (non-Javadoc) * * @see * org.xtreemfs.dir.operations.DIROperation#requestFinished(java.lang.Object * , org.xtreemfs.dir.DIRRequest) */ @Override void requestFinished(Object result, DIRRequest rq) { rq.sendSuccess((ServiceSet) result); } }