summaryrefslogtreecommitdiff
path: root/sdl_android/src/main/java/com/smartdevicelink/proxy/RPCMessage.java
blob: e55292aad08c854a73b4d9b49fa02fda6a7c4b31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package com.smartdevicelink.proxy;

import java.util.Hashtable;

public class RPCMessage extends RPCStruct  {
    public static final String KEY_REQUEST = "request";
    public static final String KEY_RESPONSE = "response";
    public static final String KEY_NOTIFICATION = "notification";
    public static final String KEY_FUNCTION_NAME = "name";
    public static final String KEY_PARAMETERS = "parameters";
    public static final String KEY_CORRELATION_ID = "correlationID";

	public RPCMessage(String functionName) {
		this(functionName, "request");
	}
	
	protected RPCMessage(RPCMessage rpcm) {
		this(rpcm.store);
	}
	
	protected RPCMessage(RPCStruct rpcs) {
		this("", "");
		this.parameters = rpcs.store;
	}
	
	public RPCMessage(String functionName, String messageType) {
		function   = new Hashtable<String, Object>();
		parameters = new Hashtable<String, Object>();
		
		this.messageType = messageType;
		function.put(KEY_PARAMETERS, parameters);
		
		if (messageType != null)
			store.put(messageType, function);
		if (functionName != null)
			function.put(KEY_FUNCTION_NAME, functionName);
	}

	@SuppressWarnings("unchecked")
    public RPCMessage(Hashtable<String, Object> hash) {
        store = hash;
        messageType = getMessageTypeName(hash.keySet());
        function = (Hashtable<String, Object>) hash.get(messageType);
        parameters = (Hashtable<String, Object>) function.get(KEY_PARAMETERS);
        if (hasKey(hash.keySet(), RPCStruct.KEY_BULK_DATA)) {
            setBulkData((byte[]) hash.get(RPCStruct.KEY_BULK_DATA));
        }
        if (hasKey(hash.keySet(), RPCStruct.KEY_PROTECTED)) {
        	setPayloadProtected((Boolean) hash.get(RPCStruct.KEY_PROTECTED));
        }
	}

	protected String messageType;
	protected Hashtable<String, Object> parameters;
	protected Hashtable<String, Object> function;

	public String getFunctionName() {
		return (String)function.get(KEY_FUNCTION_NAME);
	}
	
	protected void setFunctionName(String functionName) {
		function.put(KEY_FUNCTION_NAME, functionName);
	}

	public String getMessageType() {
		if (messageType.equals(KEY_REQUEST) || 
			messageType.equals(KEY_RESPONSE) ||
            messageType.equals(KEY_NOTIFICATION)) {
			return messageType;
		}
		return null;
	}

	// Generalized Getters and Setters
	
	public void setParameters(String key, Object value) {
		if (value != null) {
			parameters.put(key, value);
		} else {
			parameters.remove(key);
		}
	}

	public Object getParameters(String key) {
		return parameters.get(key);
	}

	@Override
	public Object getObject(Class tClass, String key) {
		Object obj = parameters.get(key);
		return formatObject(tClass, obj);
	}

	// Common Object Getters

	@Override
	public String getString(String key) {
		return (String) parameters.get(key);
	}

	@Override
	public Integer getInteger(String key) {
		return (Integer) parameters.get(key);
	}

	@Override
	public Float getFloat(String key) {
		return (Float) parameters.get(key);
	}

	@Override
	public Double getDouble(String key) {
		return (Double) parameters.get(key);
	}

	@Override
	public Boolean getBoolean(String key) { return (Boolean) parameters.get(key); }

	@Override
	public Long getLong(String key){
		Object result = parameters.get(key);
		if (result instanceof Integer) {
			return ((Integer) result).longValue();
		}else if(result instanceof Long){
			return (Long) result;
		}
		return null;
	}
}