Search in sources :

Example 11 with SerializerException

use of de.janrufmonitor.util.io.SerializerException in project janrufmonitor by tbrandt77.

the class AbstractCallDatabaseHandler method setCallList.

/**
 * Sets all calls in the submitted list to the database.
 *
 * @param cl
 * @throws SQLException
 */
public void setCallList(ICallList cl) throws SQLException {
    if (!isConnected())
        try {
            this.connect();
        } catch (ClassNotFoundException e) {
            throw new SQLException(e.getMessage());
        }
    this.internalDeleteCallList(cl);
    List uuid_check = new ArrayList(cl.size());
    PreparedStatement ps = this.getStatement("INSERT_CALL");
    PreparedStatement psa = this.getStatement("INSERT_ATTRIBUTE");
    ps.clearBatch();
    psa.clearBatch();
    ICall c = null;
    IPhonenumber pn = null;
    String uuid = null;
    for (int i = 0, j = cl.size(); i < j; i++) {
        c = cl.get(i);
        if (this.m_logger.isLoggable(Level.INFO) && c != null)
            this.m_logger.info("Adding to database: " + c.toString());
        // check if redundant uuid could occure
        uuid = c.getUUID();
        if (uuid_check.contains(uuid)) {
            this.m_logger.warning("Found duplicated UUID: " + c.toString());
            c.setUUID(new UUID().toString());
            uuid = c.getUUID();
        }
        uuid_check.add(uuid);
        pn = c.getCaller().getPhoneNumber();
        try {
            this.createCall(ps, uuid, c.getCaller().getUUID(), pn.getIntAreaCode(), pn.getAreaCode(), pn.getCallNumber(), c.getMSN().getMSN(), c.getCIP().getCIP(), c.getDate().getTime(), Serializer.toByteArray(c));
            this.createAttributes(psa, uuid, c.getAttributes());
            this.createAttributes(psa, c.getCaller().getUUID(), c.getCaller().getAttributes());
        } catch (SerializerException e) {
            this.m_logger.log(Level.SEVERE, e.getMessage(), e);
        }
        if (i % this.commit_count == 0) {
            try {
                ps.executeBatch();
                psa.executeBatch();
                ps.clearBatch();
                psa.clearBatch();
                this.m_logger.info("-------------------> executed Batch");
            } catch (SQLException e) {
                this.m_logger.log(Level.SEVERE, e.getMessage() + c.toString(), e);
            // throw new SQLException("Batch execution failed: ");
            }
        }
    }
    // execute the rest batch content
    ps.executeBatch();
    psa.executeBatch();
    uuid_check.clear();
    uuid_check = null;
}
Also used : ICall(de.janrufmonitor.framework.ICall) SQLException(java.sql.SQLException) ArrayList(java.util.ArrayList) ICallList(de.janrufmonitor.framework.ICallList) ArrayList(java.util.ArrayList) List(java.util.List) PreparedStatement(java.sql.PreparedStatement) UUID(de.janrufmonitor.util.uuid.UUID) SerializerException(de.janrufmonitor.util.io.SerializerException) IPhonenumber(de.janrufmonitor.framework.IPhonenumber)

Example 12 with SerializerException

use of de.janrufmonitor.util.io.SerializerException in project janrufmonitor by tbrandt77.

the class AbstractCallerDatabaseHandler method getCaller.

public ICaller getCaller(IPhonenumber pn) throws SQLException {
    if (!isConnected())
        try {
            this.connect();
        } catch (ClassNotFoundException e) {
            throw new SQLException(e.getMessage());
        }
    PreparedStatement ps = this.getStatement("SELECT_CALLER_PHONE");
    String p = pn.getTelephoneNumber();
    ResultSet rs = null;
    // check for internal telephone system numbers
    if (this.isInternalNumber(pn)) {
        ps.setString(1, p);
        rs = ps.executeQuery();
        while (rs.next()) {
            this.m_logger.info("Found exact match of call number: " + p);
            try {
                return Serializer.toCaller(rs.getString("content").getBytes(), this.getRuntime());
            } catch (SerializerException e) {
                this.m_logger.log(Level.SEVERE, e.getMessage(), e);
            }
        }
    }
    int maxLength = this.maxInternalNumberLength();
    // p must be an internal number but has no entry in this caller manager
    if (p.length() < maxLength)
        return null;
    // check for international call
    if (p.startsWith(this.getPrefix())) {
        this.m_logger.info("Found international call number: " + p);
        ICaller internationaCaller = null;
        ICallerManager cmg = this.getRuntime().getCallerManagerFactory().getDefaultCallerManager();
        if (cmg != null && cmg.isActive() && cmg.isSupported(IIdentifyCallerRepository.class)) {
            try {
                internationaCaller = ((IIdentifyCallerRepository) cmg).getCaller(pn);
            } catch (CallerNotFoundException e) {
                this.m_logger.log(Level.SEVERE, e.getMessage(), e);
            }
        }
        if (internationaCaller != null)
            pn = internationaCaller.getPhoneNumber();
        ps.setString(1, pn.getTelephoneNumber());
        rs = ps.executeQuery();
        while (rs.next()) {
            try {
                ICaller c = Serializer.toCaller(rs.getString("content").getBytes(), this.getRuntime());
                if (pn.getTelephoneNumber().equalsIgnoreCase(c.getPhoneNumber().getTelephoneNumber()) && pn.getIntAreaCode().equalsIgnoreCase(c.getPhoneNumber().getIntAreaCode())) {
                    // found international number
                    return c;
                }
            } catch (SerializerException e) {
                this.m_logger.log(Level.SEVERE, e.getMessage(), e);
            }
        }
    }
    // check for extension
    if (pn.getIntAreaCode() == null || pn.getIntAreaCode().length() == 0) {
        pn.setIntAreaCode(this.getDefaultIntAreaCode());
    }
    for (int i = 0; i < p.length() - maxLength; i++) {
        ps.setString(1, p.substring(0, p.length() - i) + "%");
        rs = ps.executeQuery();
        while (rs.next()) {
            try {
                ICaller c = Serializer.toCaller(rs.getString("content").getBytes(), this.getRuntime());
                if (p.startsWith(c.getPhoneNumber().getTelephoneNumber()) && pn.getIntAreaCode().equalsIgnoreCase(c.getPhoneNumber().getIntAreaCode())) {
                    // found extension phone
                    String extension = p.substring(c.getPhoneNumber().getTelephoneNumber().length(), p.length());
                    this.m_logger.info("Found call extension -" + extension + " for call number: " + p);
                    c.setUUID(new UUID().toString());
                    c.getPhoneNumber().setTelephoneNumber(p);
                    c.getPhoneNumber().setCallNumber(c.getPhoneNumber().getCallNumber() + extension);
                    // add attributes
                    IAttribute att = getRuntime().getCallerFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_EXTENSION, extension);
                    c.setAttribute(att);
                    att = getRuntime().getCallerFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_CENTRAL_NUMBER_OF_EXTENSION, p.substring(0, p.length() - extension.length()));
                    c.setAttribute(att);
                    return c;
                }
            } catch (SerializerException e) {
                this.m_logger.log(Level.SEVERE, e.getMessage(), e);
            }
        }
    }
    return null;
}
Also used : SQLException(java.sql.SQLException) IIdentifyCallerRepository(de.janrufmonitor.repository.types.IIdentifyCallerRepository) PreparedStatement(java.sql.PreparedStatement) SerializerException(de.janrufmonitor.util.io.SerializerException) ICallerManager(de.janrufmonitor.repository.ICallerManager) ICaller(de.janrufmonitor.framework.ICaller) ResultSet(java.sql.ResultSet) CallerNotFoundException(de.janrufmonitor.repository.CallerNotFoundException) IAttribute(de.janrufmonitor.framework.IAttribute) UUID(de.janrufmonitor.util.uuid.UUID)

Example 13 with SerializerException

use of de.janrufmonitor.util.io.SerializerException in project janrufmonitor by tbrandt77.

the class AbstractMultiPhoneCallerDatabaseHandler method getCaller.

@SuppressWarnings("resource")
public ICaller getCaller(IPhonenumber pn) throws SQLException {
    if (!isConnected())
        try {
            this.connect();
        } catch (ClassNotFoundException e) {
            throw new SQLException(e.getMessage());
        }
    PreparedStatement ps = this.getStatement("SELECT_CALLER_PHONE");
    String p = pn.getTelephoneNumber();
    ICaller c = null;
    ResultSet rs = null;
    // check for internal telephone system numbers
    if (this.isInternalNumber(pn)) {
        ps.setString(1, p);
        rs = ps.executeQuery();
        while (rs.next()) {
            this.m_logger.info("Found exact match of call number: " + p);
            try {
                c = Serializer.toCaller(rs.getString("content").getBytes(), this.getRuntime());
                if (c instanceof IMultiPhoneCaller) {
                    IPhonenumber cp = null;
                    for (int i = 0, j = ((IMultiPhoneCaller) c).getPhonenumbers().size(); i < j; i++) {
                        cp = (IPhonenumber) ((IMultiPhoneCaller) c).getPhonenumbers().get(i);
                        if (cp.getTelephoneNumber().startsWith(p)) {
                            this.m_logger.info("Found correct phonenumber match: " + p + " = " + cp.getTelephoneNumber());
                            ((IMultiPhoneCaller) c).getPhonenumbers().clear();
                            c.setPhoneNumber(cp);
                            return c;
                        }
                    }
                }
            } catch (SerializerException e) {
                this.m_logger.log(Level.SEVERE, e.getMessage(), e);
            }
        }
    }
    int maxLength = this.maxInternalNumberLength();
    // p must be an internal number but has no entry in this caller manager
    if (p.length() < maxLength)
        return null;
    // check for international call
    if (p.startsWith(this.getPrefix())) {
        this.m_logger.info("Found international call number: " + p);
        ICaller internationaCaller = null;
        ICallerManager cmg = this.getRuntime().getCallerManagerFactory().getDefaultCallerManager();
        if (cmg != null && cmg.isActive() && cmg.isSupported(IIdentifyCallerRepository.class)) {
            try {
                internationaCaller = ((IIdentifyCallerRepository) cmg).getCaller(pn);
            } catch (CallerNotFoundException e) {
                this.m_logger.log(Level.SEVERE, e.getMessage(), e);
            }
        }
        if (internationaCaller != null)
            pn = internationaCaller.getPhoneNumber();
        ps.setString(1, pn.getTelephoneNumber());
        rs = ps.executeQuery();
        while (rs.next()) {
            try {
                c = Serializer.toCaller(rs.getString("content").getBytes(), this.getRuntime());
                if (c instanceof IMultiPhoneCaller) {
                    IPhonenumber cp = null;
                    for (int i = 0, j = ((IMultiPhoneCaller) c).getPhonenumbers().size(); i < j; i++) {
                        cp = (IPhonenumber) ((IMultiPhoneCaller) c).getPhonenumbers().get(i);
                        if (pn.getTelephoneNumber().equalsIgnoreCase(cp.getTelephoneNumber()) && pn.getIntAreaCode().equalsIgnoreCase(cp.getIntAreaCode())) {
                            this.m_logger.info("Found correct phonenumber match: " + p + " = " + cp.getTelephoneNumber());
                            ((IMultiPhoneCaller) c).getPhonenumbers().clear();
                            c.setPhoneNumber(cp);
                            // found international number
                            return c;
                        }
                    }
                } else if (c instanceof ICaller) {
                    if (pn.getTelephoneNumber().equalsIgnoreCase(c.getPhoneNumber().getTelephoneNumber()) && pn.getIntAreaCode().equalsIgnoreCase(c.getPhoneNumber().getIntAreaCode())) {
                        // found international number
                        return c;
                    }
                }
            } catch (SerializerException e) {
                this.m_logger.log(Level.SEVERE, e.getMessage(), e);
            }
        }
    }
    // check for extension
    if (pn.getIntAreaCode() == null || pn.getIntAreaCode().length() == 0) {
        pn.setIntAreaCode(this.getDefaultIntAreaCode());
    }
    PreparedStatement ps2 = this.getStatement("SELECT_PHONE_REF_COUNT");
    if (ps2 == null)
        return null;
    boolean multiprocess = false;
    for (int i = 0; i < p.length() - maxLength; i++) {
        ps2.setString(1, p.substring(0, p.length() - i) + "%");
        rs = ps2.executeQuery();
        while (rs.next()) {
            multiprocess = rs.getInt(1) > 1;
        }
        if (!multiprocess) {
            ps.setString(1, p.substring(0, p.length() - i) + "%");
            rs = ps.executeQuery();
            while (rs.next()) {
                try {
                    c = Serializer.toCaller(rs.getString("content").getBytes(), this.getRuntime());
                    ICaller nc = this.process(c, pn, p);
                    if (nc != null)
                        return nc;
                } catch (SerializerException e) {
                    this.m_logger.log(Level.SEVERE, e.getMessage(), e);
                }
            }
        } else {
            // added 2008/04/18: processing of multiple callers is possible
            PreparedStatement ps3 = this.getStatement("SELECT_PHONE_REF");
            ps3.setString(1, p.substring(0, p.length() - i) + "%");
            rs = ps3.executeQuery();
            List uuids = new ArrayList(2);
            while (rs.next()) {
                uuids.add(rs.getString(1));
            }
            // process all UUIDs
            String uuid = null;
            ps3 = this.getStatement("SELECT_CALLER_PHONE2");
            for (int j = 0; j < uuids.size(); j++) {
                uuid = (String) uuids.get(j);
                ps3.setString(1, uuid);
                rs = ps3.executeQuery();
                while (rs.next()) {
                    try {
                        c = Serializer.toCaller(rs.getString("content").getBytes(), this.getRuntime());
                        ICaller nc = this.process(c, pn, p);
                        if (nc != null)
                            return nc;
                    } catch (SerializerException e) {
                        this.m_logger.log(Level.SEVERE, e.getMessage(), e);
                    }
                }
            }
        }
    }
    return null;
}
Also used : SQLException(java.sql.SQLException) ArrayList(java.util.ArrayList) IIdentifyCallerRepository(de.janrufmonitor.repository.types.IIdentifyCallerRepository) PreparedStatement(java.sql.PreparedStatement) SerializerException(de.janrufmonitor.util.io.SerializerException) ICallerManager(de.janrufmonitor.repository.ICallerManager) ICaller(de.janrufmonitor.framework.ICaller) ResultSet(java.sql.ResultSet) CallerNotFoundException(de.janrufmonitor.repository.CallerNotFoundException) IMultiPhoneCaller(de.janrufmonitor.framework.IMultiPhoneCaller) ArrayList(java.util.ArrayList) List(java.util.List) ICallerList(de.janrufmonitor.framework.ICallerList) IPhonenumber(de.janrufmonitor.framework.IPhonenumber)

Example 14 with SerializerException

use of de.janrufmonitor.util.io.SerializerException in project janrufmonitor by tbrandt77.

the class HsqldbCallDatabaseHandler method buildCallList.

protected ICallList buildCallList(IFilter[] filters, int count, int offset, ISearchTerm[] searchTerms) throws SQLException {
    ICallList cl = this.getRuntime().getCallFactory().createCallList();
    if (!isConnected())
        return cl;
    Statement stmt = m_con.createStatement();
    ResultSet rs = stmt.executeQuery(prepareStatement(filters, count, offset, false, searchTerms));
    while (rs.next()) {
        try {
            cl.add(Serializer.toCall(rs.getString("content").getBytes(), this.getRuntime()));
        } catch (SerializerException e) {
            this.m_logger.log(Level.SEVERE, e.getMessage(), e);
        }
    }
    return cl;
}
Also used : ICallList(de.janrufmonitor.framework.ICallList) Statement(java.sql.Statement) ResultSet(java.sql.ResultSet) SerializerException(de.janrufmonitor.util.io.SerializerException)

Aggregations

SerializerException (de.janrufmonitor.util.io.SerializerException)14 IPhonenumber (de.janrufmonitor.framework.IPhonenumber)7 PreparedStatement (java.sql.PreparedStatement)7 SQLException (java.sql.SQLException)6 ICaller (de.janrufmonitor.framework.ICaller)5 ICallerList (de.janrufmonitor.framework.ICallerList)5 ResultSet (java.sql.ResultSet)5 ICall (de.janrufmonitor.framework.ICall)4 UUID (de.janrufmonitor.util.uuid.UUID)4 File (java.io.File)4 FileNotFoundException (java.io.FileNotFoundException)4 IOException (java.io.IOException)4 ArrayList (java.util.ArrayList)4 List (java.util.List)4 IAttribute (de.janrufmonitor.framework.IAttribute)3 Statement (java.sql.Statement)3 IAttributeMap (de.janrufmonitor.framework.IAttributeMap)2 ICallList (de.janrufmonitor.framework.ICallList)2 IMultiPhoneCaller (de.janrufmonitor.framework.IMultiPhoneCaller)2 CallerNotFoundException (de.janrufmonitor.repository.CallerNotFoundException)2