Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * $RCSfile: SmsWorkOutOrange.java,v $
- * $Revision: 1.3 $
- * $Date: 2015/02/10 14:33:36 $
- * $Source: /CVS/java/io2/src/pl/com/altar/io2/common/sms/type/SmsWorkOutOrange.java,v $
- * $Author: kuba $
- */
- package pl.com.altar.io2.common.sms.type;
- import java.rmi.RemoteException;
- import java.sql.Timestamp;
- import java.util.Arrays;
- import java.util.Calendar;
- import java.util.Collection;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Iterator;
- import pl.com.altar.io2.common.Const;
- import pl.com.altar.io2.common.Env;
- import pl.com.altar.io2.common.Stat;
- import pl.com.altar.io2.common.Util;
- import pl.com.altar.io2.common.sms.ConfigAPI;
- import pl.com.altar.io2.common.thread.SmsWorkThreadOut;
- import pl.com.altar.io2.factory.SmsFactory;
- import pl.com.altar.io2.value.SmsValue;
- import pl.com.altar.io2.webservice.client.OrangeSMSC.SMSSender;
- import pl.com.altar.io2.webservice.client.OrangeSMSC.gen.SubmitException;
- import pl.com.altar.util.database.DBSQLException;
- import pl.com.altar.util.database.FinderException;
- import pl.com.altar.util.database.InconsistencyException;
- import pl.com.altar.util.database.StatementParameters;
- public class SmsWorkOutOrange extends SmsWorkThreadOut {
- protected void sendSms() {
- final int MAX_GET = 100;
- log.info("SmsWorkThreadOut sendSms START [max=" + MAX_GET + "]");
- SmsValue[] smsTAB;
- Collection<SmsValue> smsColl;
- HashMap<Integer, SmsValue> mapa;
- SmsFactory sf = new SmsFactory();
- //szukamy smsow do wyslania
- try {
- SmsValue query = new SmsValue();
- query.setKierunek(Const.SMS_OUT);
- query.setStatus(Const.SMS_STATE_NEW);
- StatementParameters statementParameters = new StatementParameters();
- statementParameters.setMaxRows(MAX_GET);
- smsColl = sf.findSmsQuery(query, statementParameters);
- if (smsColl == null || smsColl.size() == 0) {
- log.info("SmsWorkThreadOut sendSms STOP (Brak zadan)");
- return;
- }
- // jesli pobralismy max ilosc to od razu odpalamy drugi watek
- if (smsColl.size() == MAX_GET)
- Stat.addSmsOutWork(SmsWorkThreadOut.newInstance());
- smsTAB = smsColl.toArray(new SmsValue[smsColl.size()]);
- mapa = new HashMap<Integer, SmsValue>();
- for (int i = 0; i < smsTAB.length; i++) {
- mapa.put(smsTAB[i].getId(), smsTAB[i]);
- }
- }
- catch (DBSQLException ex) {
- logSmsException(ex, "Blad SQL");
- return;
- }
- catch (Exception ex) {
- logSmsException(ex, "Blad SQL");
- return;
- }
- //wysylamy kolekcje smsow, ustawiamy statusy
- try {
- sendSmses(smsColl);
- }
- catch (RemoteException ex) {
- logSmsException(ex, "Blad inicjowania wysylania SMS");
- return;
- }
- //aktualizujemy w bazie po wyslaniu
- for (Iterator<SmsValue> iterator = smsColl.iterator(); iterator.hasNext();) {
- SmsValue smsValue = (SmsValue)iterator.next();
- try {
- if (!smsValue.getStatus().equals(Const.SMS_STATE_NEW))
- sf.updateSms(smsValue);
- }
- catch (FinderException ex) {
- logSmsException(ex, "Blad");
- return;
- }
- catch (InconsistencyException ex) {
- logSmsException(ex, "Blad");
- return;
- }
- catch (DBSQLException ex) {
- logSmsException(ex, "Blad SQL");
- return;
- }
- catch (Exception ex) {
- logSmsException(ex, "Blad");
- return;
- }
- }
- log.info(String.format("SmsWorkThreadOut STOP [%d]", smsColl.size()));
- }
- private void logSmsException(Exception ex, String errmsg) {
- log.error(String.format("%s: %s", errmsg, ex.getMessage()));
- log.info("SmsWorkThreadOut sendSms STOP");
- }
- /*
- * Odszukuje LA po numerze nadawcy.
- * Numer nadawcy mo¿e byæ albo = LA
- * albo mo¿e byæ pod tym LA w licie numerów do prezentacji
- */
- private String findLA(String senderAddress) {
- String la = null, numbersConf = null;
- String[] numbers;
- for (int ii = Const.MIN_LA_N; ii <= Const.MAX_LA_N; ii++) {
- la = Env.getConfParameterValue(String.format(Const.CONF_SMS_ORANGESMSC_LA_N, ii), false);
- if (la == null)
- continue;
- else if (la.equals(senderAddress))
- return la;
- else {
- numbersConf = Env.getConfParameterValue(String.format(Const.CONF_SMS_ORANGESMSC_LA_N_NUMBERS, ii), false);
- numbers = ConfigAPI.numbers2Array(numbersConf);
- if (Arrays.asList(numbers).contains(senderAddress))
- return la;
- }
- }
- return la;
- }
- private String findUsername(String LA) {
- String la;
- for (int ii = Const.MIN_LA_N; ii <= Const.MAX_LA_N; ii++) {
- la = Env.getConfParameterValue(String.format(Const.CONF_SMS_ORANGESMSC_LA_N, ii), false);
- if (la == null)
- continue;
- else if (la.equals(LA))
- return Env.getConfParameterValue(String.format(Const.CONF_SMS_ORANGESMSC_LA_N_USERNAME, ii), true);
- }
- return null;
- }
- private String findPassword(String LA) {
- String la;
- for (int ii = Const.MIN_LA_N; ii <= Const.MAX_LA_N; ii++) {
- la = Env.getConfParameterValue(String.format(Const.CONF_SMS_ORANGESMSC_LA_N, ii), false);
- if (la == null)
- continue;
- else if (la.equals(LA))
- return Env.getConfParameterValue(String.format(Const.CONF_SMS_ORANGESMSC_LA_N_PASSWORD, ii), true);
- }
- return null;
- }
- private void sendSmses(Collection<SmsValue> smsColl) throws RemoteException {
- String url = Env.getConfParameterValue(Const.CONF_SMS_ORANGESMSC_URL, true);
- String auth = Env.getConfParameterValue(Const.CONF_SMS_ORANGESMSC_AUTHORIZATION_BASIC, false);
- String LA, user, pass;
- SMSSender sender = null;
- HashMap<String, SMSSender> senders = new HashMap<String, SMSSender>();
- for (Iterator<SmsValue> iterator = smsColl.iterator(); iterator.hasNext();) {
- SmsValue smsValue = (SmsValue)iterator.next();
- Calendar expiryDate = null;
- Timestamp waznosc = smsValue.getWaznosc();
- if (waznosc != null) {
- expiryDate = Calendar.getInstance();
- expiryDate.setTimeInMillis(waznosc.getTime());
- }
- try {
- boolean czyPotwierdzac;
- String deliveryStatus;
- if (smsValue.getPotwierdzenie() == 0) {
- czyPotwierdzac = false;
- deliveryStatus = Const.SMS_STATE_DELIVERED;
- }
- else {
- czyPotwierdzac = true;
- deliveryStatus = Const.SMS_OUT_STATE_WAIT_DELIVERY;
- }
- LA = findLA(smsValue.getNadawca());
- if (LA == null) {
- log.error("Blad wyslania smsa: brak skonfigurowanego LA dla nadawcy:" + smsValue.getNadawca());
- continue;
- }
- user = findUsername(LA);
- if (user == null) {
- log.error("Blad wyslania smsa: brak skonfigurowanego user dla LA:" + LA);
- continue;
- }
- pass = findPassword(LA);
- if (pass == null) {
- log.error("Blad wyslania smsa: brak skonfigurowanego pass dla LA:" + LA);
- continue;
- }
- log.debug(String.format("LA='%s' user='%s' pass='%s'", LA, user, pass));
- if (auth == null || auth.equals("0")) {
- if (sender == null) sender = new SMSSender(url);
- }
- else {
- sender = senders.get(LA);
- if (sender == null) {
- String login = String.format("%s+%s", LA, user);
- sender = new SMSSender(url, login, pass);
- senders.put(LA, sender);
- }
- }
- String idSmsc = sender.sendSMS(smsValue.getTresc(), smsValue.getOdbiorca(), LA, pass, user, smsValue.getNadawca(), expiryDate, czyPotwierdzac);
- smsValue.setIdSmsc(idSmsc);
- smsValue.setStatus(deliveryStatus);
- Date date = new java.util.Date();
- smsValue.setData(new Timestamp(date.getTime()));
- }
- catch (RemoteException ex) {
- log.error("Blad wyslania smsow:" + ex.getMessage());
- log.error(Util.getStackTraceWriter(ex));
- return;
- }
- catch (SubmitException ex) {
- log.error("Blad wyslania smsow:" + ex.getMessage());
- log.error(Util.getStackTraceWriter(ex));
- return;
- }
- }
- }
- @Override
- protected void receiveDelivery() {
- // TODO Auto-generated method stub
- }
- public static void main(String[] args) {
- String numbers = "aaaaa , bbbb,cccc, ddddd,";
- System.out.println(Arrays.asList(ConfigAPI.numbers2Array(numbers)));
- /*
- SmsWorkOutOrange swoo = new SmsWorkOutOrange();
- swoo.sendSms();
- */
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement