/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.camel.component.smpp; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.jsmpp.session.SMPPSession; public enum SmppCommandType { SUBMIT_SM("SubmitSm") { @Override public SmppSubmitSmCommand createCommand(SMPPSession session, SmppConfiguration config) { return new SmppSubmitSmCommand(session, config); } }, REPLACE_SM("ReplaceSm") { @Override public SmppReplaceSmCommand createCommand(SMPPSession session, SmppConfiguration config) { return new SmppReplaceSmCommand(session, config); } }, QUERY_SM("QuerySm") { @Override public SmppQuerySmCommand createCommand(SMPPSession session, SmppConfiguration config) { return new SmppQuerySmCommand(session, config); } }, SUBMIT_MULTI("SubmitMulti") { @Override public SmppSubmitMultiCommand createCommand(SMPPSession session, SmppConfiguration config) { return new SmppSubmitMultiCommand(session, config); } }, CANCEL_SM("CancelSm") { @Override public SmppCancelSmCommand createCommand(SMPPSession session, SmppConfiguration config) { return new SmppCancelSmCommand(session, config); } }, DATA_SHORT_MESSAGE("DataSm") { @Override public SmppDataSmCommand createCommand(SMPPSession session, SmppConfiguration config) { return new SmppDataSmCommand(session, config); } }; private String commandName; SmppCommandType(String commandName) { this.commandName = commandName; } public String getCommandName() { return commandName; } public abstract SmppCommand createCommand(SMPPSession session, SmppConfiguration config); /** * Tries to return an instance of {@link SmppCommandType} using * {@link SmppConstants#COMMAND} header of the incoming message. * <p/> * Returns {@link #SUBMIT_SM} if there is no {@link SmppConstants#COMMAND} * header in the incoming message or value of such a header cannot be * recognized. * <p/> * The valid values for the {@link SmppConstants#COMMAND} header are: <span * style="font: bold;">SubmitSm</span> <span * style="font: bold;">ReplaceSm</span>, <span * style="font: bold;">QuerySm</span>, <span * style="font: bold;">SubmitMulti</span>, <span * style="font: bold;">CancelSm</span>, <span * style="font: bold;">DataSm</span>. * * @param exchange * an exchange to get an incoming message from * @return an instance of {@link SmppCommandType} */ public static SmppCommandType fromExchange(Exchange exchange) { Message in = exchange.getIn(); String commandName = null; if (in.getHeaders().containsKey(SmppConstants.COMMAND)) { commandName = in.getHeader(SmppConstants.COMMAND, String.class); } SmppCommandType commandType = SUBMIT_SM; for (SmppCommandType nextCommandType : values()) { if (nextCommandType.commandName.equals(commandName)) { commandType = nextCommandType; break; } } return commandType; } }