001    /*
002      GRANITE DATA SERVICES
003      Copyright (C) 2011 GRANITE DATA SERVICES S.A.S.
004    
005      This file is part of Granite Data Services.
006    
007      Granite Data Services is free software; you can redistribute it and/or modify
008      it under the terms of the GNU Library General Public License as published by
009      the Free Software Foundation; either version 2 of the License, or (at your
010      option) any later version.
011    
012      Granite Data Services is distributed in the hope that it will be useful, but
013      WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
014      FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
015      for more details.
016    
017      You should have received a copy of the GNU Library General Public License
018      along with this library; if not, see <http://www.gnu.org/licenses/>.
019    */
020    
021    package flex.messaging.messages;
022    
023    /**
024     * @author Franck WOLFF
025     */
026    public class CommandMessage extends AsyncMessage {
027    
028        private static final long serialVersionUID = 1L;
029    
030        public static final String SELECTOR_HEADER = "DSSelector";
031    
032        public static final int SUBSCRIBE_OPERATION = 0;
033        public static final int UNSUBSCRIBE_OPERATION = 1;
034        public static final int POLL_OPERATION = 2;
035        public static final int CLIENT_SYNC_OPERATION = 4;
036        public static final int CLIENT_PING_OPERATION = 5;
037        public static final int CLUSTER_REQUEST_OPERATION = 7;
038        public static final int LOGIN_OPERATION = 8;
039        public static final int LOGOUT_OPERATION = 9;
040        public static final int SESSION_INVALIDATE_OPERATION = 10;
041        public static final int UNKNOWN_OPERATION = 10000;
042    
043        // Gravity extension (tunnel connection).
044        public static final int CONNECT_OPERATION = 20;
045        public static final int DISCONNECT_OPERATION = 21;
046    
047        private String messageRefType;
048        private int operation;
049    
050        public CommandMessage() {
051            super();
052        }
053    
054        public String getMessageRefType() {
055            return messageRefType;
056        }
057        public void setMessageRefType(String messageRefType) {
058            this.messageRefType = messageRefType;
059        }
060    
061        public int getOperation() {
062            return operation;
063        }
064        public void setOperation(int operation) {
065            this.operation = operation;
066        }
067    
068        public boolean isSecurityOperation() {
069            return isLoginOperation() || isLogoutOperation();
070        }
071        public boolean isLoginOperation() {
072            return operation == LOGIN_OPERATION;
073        }
074        public boolean isLogoutOperation() {
075            return operation == LOGOUT_OPERATION;
076        }
077    
078        public boolean isClientPingOperation() {
079            return operation == CLIENT_PING_OPERATION;
080        }
081    
082        @Override
083        public String toString() {
084            return toString("");
085        }
086    
087        @Override
088        public String toString(String indent) {
089            StringBuilder sb = new StringBuilder(512);
090            sb.append(getClass().getName()).append(" {");
091            sb.append('\n').append(indent).append("  messageRefType: ").append(messageRefType);
092            sb.append('\n').append(indent).append("  operation: ").append(getReadableOperation(operation));
093            super.toString(sb, indent, (isLoginOperation() ? HIDDEN_CREDENTIALS : null));
094            sb.append('\n').append(indent).append('}');
095            return sb.toString();
096        }
097    
098        private static String getReadableOperation(int operation) {
099            switch (operation) {
100            case SUBSCRIBE_OPERATION:
101                return "SUBSCRIBE";
102            case UNSUBSCRIBE_OPERATION:
103                return "UNSUBSCRIBE";
104            case POLL_OPERATION:
105                return "POLL";
106            case CLIENT_SYNC_OPERATION:
107                return "CLIENT_SYNC";
108            case CLIENT_PING_OPERATION:
109                return "CLIENT_PING";
110            case CLUSTER_REQUEST_OPERATION:
111                return "CLUSTER_REQUEST";
112            case LOGIN_OPERATION:
113                return "LOGIN";
114            case LOGOUT_OPERATION:
115                return "LOGOUT";
116            case SESSION_INVALIDATE_OPERATION:
117                return "SESSION_INVALIDATE";
118            case UNKNOWN_OPERATION:
119                return "UNKNOWN";
120    
121            // Gravity extension (tunnel [dis]connection).
122            case CONNECT_OPERATION:
123                return "CONNECT";
124            case DISCONNECT_OPERATION:
125                return "DISCONNECT";
126    
127            default:
128                return "REALLY UNKNOWN: 0x" + Integer.toBinaryString(operation);
129            }
130        }
131    }