/* * Copyright (c) 2008-2011 EMC Corporation * All Rights Reserved */ package com.emc.storageos.volumecontroller.impl; import java.io.*; import java.util.*; /** * Placeholder implementation of controller async task. */ public class ControlRequest implements Serializable { private static final String QUEUE_NAME = "queueName"; private static final String METHOD_FIELD_NAME = "method"; private static final String TARGET_CLASS_FIELD_NAME = "targettype"; private static final String ARG_FIELD_NAME = "arguments"; private static final String DEVICE_INFO_NAME = "deviceinfo"; private static final String TIMESTAMP = "timestamp"; private static final String LOCK_GROUP = "lockGroup"; private Map<String, Object> _req = new HashMap<String, Object>(); private ControlRequest() { } public ControlRequest(String queueName, Dispatcher.DeviceInfo info, Object target, String method, Object... args) { _req.put(QUEUE_NAME, queueName); _req.put(DEVICE_INFO_NAME, info); _req.put(METHOD_FIELD_NAME, method); _req.put(TARGET_CLASS_FIELD_NAME, target.getClass().getName()); _req.put(TIMESTAMP, System.currentTimeMillis()); _req.put(ARG_FIELD_NAME, Arrays.asList(args)); } public Object[] getArg() { List arg = (List) _req.get(ARG_FIELD_NAME); return arg.toArray(); } public String getMethodName() { return (String) _req.get(METHOD_FIELD_NAME); } public String getTargetClassName() { return (String) _req.get(TARGET_CLASS_FIELD_NAME); } public Dispatcher.DeviceInfo getDeviceInfo() { return (Dispatcher.DeviceInfo) _req.get(DEVICE_INFO_NAME); } public String getQueueName() { return (String) _req.get(QUEUE_NAME); } public Long getTimestamp() { return (Long) _req.get(TIMESTAMP); } public void setLockGroup(String lockGroup) { _req.put(LOCK_GROUP, lockGroup); } public String getLockGroup() { return (String) _req.get(LOCK_GROUP); } @SuppressWarnings({ "squid:S2118" }) public byte[] serialize() { try { ByteArrayOutputStream out = new ByteArrayOutputStream(); ObjectOutputStream oout = new ObjectOutputStream(out); oout.writeObject(_req); // Can not write non-serializable object(Map) return out.toByteArray(); } catch (Exception e) { throw new IllegalStateException(e); } } public static ControlRequest deserialize(byte[] data) { try { ControlRequest request = new ControlRequest(); ObjectInputStream oim = new ObjectInputStream(new ByteArrayInputStream(data)); Map<String, Object> req = (Map<String, Object>) oim.readObject(); request._req = req; return request; } catch (IOException e) { throw new IllegalStateException(e); } catch (ClassNotFoundException e) { throw new IllegalStateException(e); } } }