package org.dcache.webadmin.model.dataaccess.communication.impl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import diskCacheV111.pools.PoolV2Mode;
import diskCacheV111.vehicles.PoolModifyModeMessage;
import dmg.cells.nucleus.CellPath;
import org.dcache.webadmin.model.dataaccess.communication.CellMessageGenerator;
/**
* generates Messages for a number of given Pools. It returns an iterator over them
* for accessing and processing.
* @author jans
*/
public class PoolModifyModeMessageGenerator implements CellMessageGenerator<PoolModifyModeMessage> {
// made up errrorcode for the poolmodifymessage, because it needs one, that has no
// consequence on the pool itself- see org.dcache.pool.classic.PoolV4
private static final int MADE_UP_ERRORCODE = 298;
private String _userName;
private int _numberOfMessages;
private Set<CellMessageRequest<PoolModifyModeMessage>> _messageRequests =
new HashSet<>();
private static final Logger _log = LoggerFactory.getLogger(PoolModifyModeMessageGenerator.class);
public PoolModifyModeMessageGenerator(Set<String> pools, PoolV2Mode poolMode, String username) {
_log.debug("Generating messages for {}", pools);
_userName = username;
_numberOfMessages = pools.size();
createMessages(pools, poolMode);
}
private void createMessages(Set<String> pools, PoolV2Mode poolMode) {
for (String pool : pools) {
PoolModifyModeMessageRequest sendRequest = new PoolModifyModeMessageRequest(pool,
poolMode);
_messageRequests.add(sendRequest);
}
}
@Override
public Iterator<CellMessageRequest<PoolModifyModeMessage>> iterator() {
return _messageRequests.iterator();
}
@Override
public int getNumberOfMessages() {
return _numberOfMessages;
}
private class PoolModifyModeMessageRequest implements CellMessageRequest<PoolModifyModeMessage> {
private PoolModifyModeMessage _payload;
private String _destination;
private boolean _sentSuccessfully;
public PoolModifyModeMessageRequest(String pool, PoolV2Mode poolMode) {
_payload = new PoolModifyModeMessage(pool, poolMode);
_payload.setStatusInfo(MADE_UP_ERRORCODE,
"Changed by WebAdminInterface - " + _userName);
_destination = pool;
}
@Override
public PoolModifyModeMessage getPayload() {
_log.debug("getPayload for {}", _destination);
return _payload;
}
@Override
public Class<PoolModifyModeMessage> getPayloadType() {
return PoolModifyModeMessage.class;
}
@Override
public CellPath getDestination() {
return new CellPath(_destination);
}
@Override
public boolean isSuccessful() {
return _sentSuccessfully;
}
@Override
public void setSuccessful(boolean successful) {
_sentSuccessfully = successful;
}
@Override
public void setAnswer(Serializable answer) {
// currently no interest in answer since it is not used
}
@Override
public PoolModifyModeMessage getAnswer() {
throw new UnsupportedOperationException("Not supported yet.");
}
}
}