/** * Copyright 2010 Red Hat, Inc. and/or its affiliates. * * Licensed 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.jbpm.process.workitem.jabber; import java.util.ArrayList; import java.util.List; import org.jbpm.process.workitem.AbstractLogOrThrowWorkItemHandler; import org.jivesoftware.smack.Chat; import org.jivesoftware.smack.ChatManager; import org.jivesoftware.smack.ConnectionConfiguration; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Presence; import org.kie.api.runtime.process.WorkItem; import org.kie.api.runtime.process.WorkItemManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class JabberWorkItemHandler extends AbstractLogOrThrowWorkItemHandler { private static final Logger logger = LoggerFactory.getLogger(JabberWorkItemHandler.class); private String user; private String password; private String server; private int port; private String service; private String text; private List<String> toUsers = new ArrayList<String>(); public void executeWorkItem(WorkItem workItem, WorkItemManager manager) { this.user = (String) workItem.getParameter("User"); this.password = (String) workItem.getParameter("Password"); this.server = (String) workItem.getParameter("Server"); String portString = (String) workItem.getParameter("Port"); if(portString != null && !portString.equals("")){ this.port = Integer.valueOf((String) workItem.getParameter("Port")); } this.service = (String) workItem.getParameter("Service"); this.text = (String) workItem.getParameter("Text"); String to = (String) workItem.getParameter("To"); if ( to == null || to.trim().length() == 0 ) { throw new RuntimeException( "IM must have one or more to adresses" ); } for (String s: to.split(";")) { if (s != null && !"".equals(s)) { this.toUsers.add(s); } } ConnectionConfiguration conf = new ConnectionConfiguration(server, port , service); XMPPConnection connection = null; try { if(server !=null && !server.equals("") && port != 0){ connection = new XMPPConnection(conf); } else { connection = new XMPPConnection(service); } connection.connect(); logger.info("Connected to {}", connection.getHost()); connection.login(user, password); logger.info("Logged in as {}", connection.getUser()); Presence presence = new Presence(Presence.Type.available); connection.sendPacket(presence); for(String toUser : toUsers){ ChatManager chatmanager = connection.getChatManager(); Chat chat = chatmanager.createChat(toUser, null); // google bounces back the default message types, you must use chat Message msg = new Message(toUser, Message.Type.chat); msg.setBody(text); chat.sendMessage(msg); logger.info("Message Sent {}", msg); } connection.disconnect(); manager.completeWorkItem(workItem.getId(), null); } catch (Exception e) { handleException(e); } } public void abortWorkItem(WorkItem workItem, WorkItemManager manager) { throw new UnsupportedOperationException("Not supported yet."); } }