Search in sources :

Example 6 with UUID

use of de.janrufmonitor.util.uuid.UUID in project janrufmonitor by tbrandt77.

the class VcfParser30 method getImageFromBase64.

private String getImageFromBase64(String base64Image, String type) {
    try {
        ByteArrayInputStream encodedIn = new ByteArrayInputStream(base64Image.getBytes());
        Base64Decoder b64 = new Base64Decoder(encodedIn);
        ByteArrayOutputStream decodedOut = new ByteArrayOutputStream();
        Stream.copy(b64, decodedOut);
        b64.close();
        decodedOut.close();
        ByteArrayInputStream decodedIn = new ByteArrayInputStream(decodedOut.toByteArray());
        return this.createImage(decodedIn, (new UUID().toString() + "." + type));
    } catch (IOException e) {
        this.m_logger.log(Level.SEVERE, e.getMessage(), e);
    }
    return null;
}
Also used : ByteArrayInputStream(java.io.ByteArrayInputStream) Base64Decoder(de.janrufmonitor.util.io.Base64Decoder) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) UUID(de.janrufmonitor.util.uuid.UUID)

Example 7 with UUID

use of de.janrufmonitor.util.uuid.UUID in project janrufmonitor by tbrandt77.

the class OutlookMappingManager method mapToJamCaller.

public ICaller mapToJamCaller(Dispatch oCaller, IOutlookMapping om) {
    if (this.m_logger.isLoggable(Level.INFO)) {
        this.m_logger.info("Applying mapping: " + om.toString());
    }
    IAttributeMap m = getRuntime().getCallerFactory().createAttributeMap();
    // processing the numbers
    List outlookNumberMappings = om.getSupportedNumbers();
    List phones = new ArrayList(outlookNumberMappings.size());
    String numbertype = null;
    String number = null;
    IPhonenumber phone = null;
    for (int i = 0, j = outlookNumberMappings.size(); i < j; i++) {
        numbertype = (String) outlookNumberMappings.get(i);
        number = Dispatch.get(oCaller, numbertype).toString().trim();
        if (number != null && !PhonenumberAnalyzer.getInstance(getRuntime()).isInternal(number) && !PhonenumberAnalyzer.getInstance(getRuntime()).isClired(number)) {
            if (this.m_logger.isLoggable(Level.INFO)) {
                this.m_logger.info("OutlookCallerManager raw number: " + number);
            }
            phone = PhonenumberAnalyzer.getInstance(getRuntime()).toIdentifiedPhonenumber(number);
            if (this.m_logger.isLoggable(Level.INFO)) {
                this.m_logger.info("OutlookCallerManager identified number: " + phone);
            }
            if (phone.getTelephoneNumber().trim().length() > 0 && !phone.isClired()) {
                m.add(getNumberTypeAttribute(numbertype, phone, om));
                m.add(om.createOutlookNumberTypeAttribute(phone, numbertype));
                phones.add(phone);
                if (this.m_logger.isLoggable(Level.INFO)) {
                    this.m_logger.info("Added phone " + phone.toString());
                }
            }
        } else if (number != null && (number.length() > 0 && PhonenumberAnalyzer.getInstance(getRuntime()).isInternal(number))) {
            // found internal number
            phone = getRuntime().getCallerFactory().createInternalPhonenumber(number);
            if (phone.getTelephoneNumber().trim().length() > 0 && !phone.isClired()) {
                m.add(getNumberTypeAttribute(numbertype, phone, om));
                m.add(om.createOutlookNumberTypeAttribute(phone, numbertype));
                phones.add(phone);
                if (this.m_logger.isLoggable(Level.INFO)) {
                    this.m_logger.info("Added internal phone " + phone.toString());
                }
            }
        }
    }
    if (phones.size() > 0) {
        if (phones.size() > 1)
            Collections.sort(phones, new PhonenumberTypeComparator(m, om));
        // process address data
        List outlookContacFieldMappings = om.getSupportedContactFields();
        String field = null;
        String jamField = null;
        IAttribute a = null;
        for (int i = 0, j = outlookContacFieldMappings.size(); i < j; i++) {
            field = (String) outlookContacFieldMappings.get(i);
            jamField = om.mapToJamField(field);
            if (jamField != null) {
                a = createAttribute(jamField, Dispatch.get(oCaller, field).toString().trim());
                if (a != null) {
                    m.add(a);
                    if (this.m_logger.isLoggable(Level.INFO)) {
                        this.m_logger.info("Added attribute " + a.toString());
                    }
                    a = om.createOutlookContactFieldAttribute(field);
                    if (a != null)
                        m.add(a);
                }
            }
        }
        a = createAttribute(IJAMConst.ATTRIBUTE_NAME_CREATION, Long.toString(new OutlookDate(Dispatch.get(oCaller, "CreationTime").getDate()).getTime()));
        if (a != null)
            m.add(a);
        a = createAttribute(IJAMConst.ATTRIBUTE_NAME_MODIFIED, Long.toString(new OutlookDate(Dispatch.get(oCaller, "LastModificationTime").getDate()).getTime()));
        if (a != null)
            m.add(a);
        a = createAttribute("outlook.uuid", Dispatch.get(oCaller, OutlookContactConst.User1).toString());
        if (a != null)
            m.add(a);
        String geodata = null;
        if (om.getSupportedContactFields().contains(OutlookContactConst.User3)) {
            geodata = Dispatch.get(oCaller, OutlookContactConst.User3).toString();
        }
        if (om.getSupportedContactFields().contains(OutlookContactConst.User4)) {
            geodata = Dispatch.get(oCaller, OutlookContactConst.User4).toString();
        }
        if (geodata != null && geodata.trim().length() > 0) {
            if (this.m_logger.isLoggable(Level.INFO)) {
                this.m_logger.info("Found geodata: " + geodata);
            }
            String[] values = geodata.split(",");
            if (values.length == 3) {
                a = createAttribute(IJAMConst.ATTRIBUTE_NAME_GEO_ACC, values[0]);
                if (a != null)
                    m.add(a);
                a = createAttribute(IJAMConst.ATTRIBUTE_NAME_GEO_LNG, values[1]);
                if (a != null)
                    m.add(a);
                a = createAttribute(IJAMConst.ATTRIBUTE_NAME_GEO_LAT, values[2]);
                if (a != null)
                    m.add(a);
            }
        }
        IAttributeMap additionalMap = om.getSpecialAttributes();
        if (additionalMap != null) {
            if (this.m_logger.isLoggable(Level.INFO)) {
                this.m_logger.info("Adding special attributes: " + additionalMap.toString());
            }
            m.addAll(additionalMap);
        }
        // TODO: 2008/08/13 - Hack - split up street and street no
        IAttribute street = m.get(IJAMConst.ATTRIBUTE_NAME_STREET);
        if (street != null && street.getValue().trim().length() > 0) {
            String[] streetSplit = street.getValue().trim().split(" ");
            if (streetSplit.length > 1) {
                street.setValue("");
                for (int i = 0; i < streetSplit.length - 1; i++) {
                    street.setValue(street.getValue() + " " + streetSplit[i]);
                }
                street.setValue(street.getValue().trim());
                m.add(street);
                IAttribute streetno = getRuntime().getCallerFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_STREET_NO, streetSplit[streetSplit.length - 1]);
                m.add(streetno);
            }
        }
        ICaller outlookCaller = getRuntime().getCallerFactory().createCaller(null, phones, m);
        String uuid = Dispatch.get(oCaller, OutlookContactConst.User1).toString().trim();
        if (uuid != null && uuid.length() > 0)
            outlookCaller.setUUID(uuid);
        else
            // outlookCaller.setUUID(outlookCaller.getName().getLastname()+"_"+outlookCaller.getName().getFirstname()+"_"+outlookCaller.getPhoneNumber().getTelephoneNumber());
            outlookCaller.setUUID(new UUID().toString());
        this.setPictureAttribute(outlookCaller, oCaller);
        IAttribute cm = getRuntime().getCallerFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_CALLERMANAGER, ID);
        outlookCaller.setAttribute(cm);
        if (this.m_logger.isLoggable(Level.INFO)) {
            this.m_logger.info("Created Outlook contact: " + outlookCaller.toString());
        }
        return outlookCaller;
    }
    return null;
}
Also used : ICaller(de.janrufmonitor.framework.ICaller) ArrayList(java.util.ArrayList) IAttribute(de.janrufmonitor.framework.IAttribute) IAttributeMap(de.janrufmonitor.framework.IAttributeMap) ArrayList(java.util.ArrayList) List(java.util.List) UUID(de.janrufmonitor.util.uuid.UUID) OutlookDate(de.janrufmonitor.repository.OutlookDate) IPhonenumber(de.janrufmonitor.framework.IPhonenumber)

Example 8 with UUID

use of de.janrufmonitor.util.uuid.UUID in project janrufmonitor by tbrandt77.

the class OutlookContactProxy method findContact.

public synchronized ICaller findContact(IPhonenumber pn) throws OutlookContactProxyException {
    ICaller c = Identifier.identifyDefault(getRuntime(), pn);
    if (c == null && PhonenumberAnalyzer.getInstance(getRuntime()).isInternal(pn.getTelephoneNumber())) {
        pn = getRuntime().getCallerFactory().createInternalPhonenumber(pn.getTelephoneNumber());
        c = getRuntime().getCallerFactory().createCaller(pn);
    }
    if (c != null) {
        if (PhonenumberAnalyzer.getInstance(getRuntime()).isInternal(pn)) {
            IPhonenumber p = getRuntime().getCallerFactory().createInternalPhonenumber(pn.getTelephoneNumber());
            c.setPhoneNumber(p);
        }
        pn = c.getPhoneNumber();
        try {
            List uuids = this.m_dbh.select(pn.getIntAreaCode(), pn.getAreaCode(), pn.getCallNumber());
            if (this.m_logger.isLoggable(Level.INFO)) {
                this.m_logger.info("List of found UUIDs: " + uuids);
            }
            if (uuids.size() > 0) {
                String uuid = null;
                for (int k = 0; k < uuids.size(); k++) {
                    uuid = (String) uuids.get(k);
                    ActiveXComponent outlook = new ActiveXComponent("Outlook.Application");
                    Dispatch mapiNS = null;
                    Dispatch contactsFolder = null;
                    Dispatch contactsSubFolder = null;
                    Dispatch items = null;
                    Dispatch contact = null;
                    try {
                        if (this.m_logger.isLoggable(Level.INFO))
                            this.m_logger.info("created Outlook.Application dispatch");
                        if (this.m_logger.isLoggable(Level.INFO))
                            this.m_logger.info("Microsoft Outlook version: " + Dispatch.get(outlook.getObject(), "Version"));
                        mapiNS = outlook.getProperty("Session").toDispatch();
                        if (this.m_logger.isLoggable(Level.INFO))
                            this.m_logger.info("Microsoft Outlook namespace: " + mapiNS);
                        Variant contactsVariant = new Variant(10);
                        contactsFolder = Dispatch.call(mapiNS, "GetDefaultFolder", contactsVariant).toDispatch();
                        if (this.m_logger.isLoggable(Level.INFO))
                            this.m_logger.info("Microsoft Outlook folder: " + contactsFolder);
                        contactsVariant.safeRelease();
                        // getting configured subfolders
                        List subfolders = new ArrayList();
                        subfolders.add("");
                        subfolders.addAll(getAllContactFolders());
                        String folder = null;
                        for (int i = 0, j = subfolders.size(); i < j; i++) {
                            folder = (String) subfolders.get(i);
                            items = this.getItemsOfFolder(contactsFolder, folder, false);
                            if (items == null)
                                continue;
                            contact = this.findContactByUUID(items, uuid);
                            if (contact != null) {
                                if (this.m_logger.isLoggable(Level.INFO)) {
                                    this.m_logger.info("Outlook contact found for UUID: " + uuid);
                                }
                                ICallerList cl = getCallerListFromSingleContact(contact);
                                if (cl.size() == 1) {
                                    ICaller rc = cl.get(0);
                                    rc.setUUID(new UUID().toString());
                                    if (rc instanceof IMultiPhoneCaller) {
                                        ((IMultiPhoneCaller) rc).getPhonenumbers().clear();
                                    }
                                    rc.setPhoneNumber(pn);
                                    IAttribute att = getRuntime().getCallerFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_CENTRAL_NUMBER_OF_EXTENSION, pn.getTelephoneNumber());
                                    rc.setAttribute(att);
                                    if (this.m_logger.isLoggable(Level.INFO)) {
                                        this.m_logger.info("Exact caller match: " + rc.toString());
                                    }
                                    return rc;
                                }
                                if (cl.size() == 2) {
                                    ICaller rc = null;
                                    for (int x = 0; x < cl.size(); x++) {
                                        rc = cl.get(x);
                                        if (rc instanceof IMultiPhoneCaller) {
                                            List phones = ((IMultiPhoneCaller) rc).getPhonenumbers();
                                            IPhonenumber p = null;
                                            for (int z = 0; z < phones.size(); z++) {
                                                p = (IPhonenumber) phones.get(z);
                                                if (p.getIntAreaCode().equalsIgnoreCase(pn.getIntAreaCode()) && p.getAreaCode().equalsIgnoreCase(pn.getAreaCode()) && pn.getCallNumber().startsWith(p.getCallNumber())) {
                                                    if (this.m_logger.isLoggable(Level.INFO)) {
                                                        this.m_logger.info("Caller match (IMultiPhoneCaller): " + rc.toString());
                                                    }
                                                    rc.setUUID(new UUID().toString());
                                                    if (rc instanceof IMultiPhoneCaller) {
                                                        ((IMultiPhoneCaller) rc).getPhonenumbers().clear();
                                                    }
                                                    rc.setPhoneNumber(p);
                                                    return rc;
                                                }
                                            }
                                        } else {
                                            if (rc.getPhoneNumber().getIntAreaCode().equalsIgnoreCase(pn.getIntAreaCode()) && rc.getPhoneNumber().getAreaCode().equalsIgnoreCase(pn.getAreaCode()) && pn.getCallNumber().startsWith(rc.getPhoneNumber().getCallNumber())) {
                                                if (this.m_logger.isLoggable(Level.INFO)) {
                                                    this.m_logger.info("Caller match (ICaller): " + rc.toString());
                                                }
                                                return rc;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    } catch (ComFailException ex) {
                        this.m_logger.warning("1 item (e.g. distribution list) was ignored on loading.");
                        if (ex.toString().indexOf("Can't get object clsid from progid") > -1) {
                            this.m_logger.log(Level.SEVERE, ex.toString(), ex);
                            PropagationFactory.getInstance().fire(new Message(Message.ERROR, getNamespace(), "olstarterror", ex));
                        } else
                            this.m_logger.warning(ex.getMessage() + ", " + ex.getSource());
                    } catch (Exception ex) {
                        throw new OutlookContactProxyException("Error in Application Outlook.", ex);
                    } finally {
                        // added 2006/02/05: clean outlook references
                        if (contact != null)
                            contact.safeRelease();
                        if (items != null)
                            items.safeRelease();
                        if (contactsFolder != null)
                            contactsFolder.safeRelease();
                        if (contactsSubFolder != null)
                            contactsSubFolder.safeRelease();
                        if (mapiNS != null)
                            mapiNS.safeRelease();
                        if (outlook != null)
                            outlook.safeRelease();
                    }
                }
            } else {
                Properties config = this.getRuntime().getConfigManagerFactory().getConfigManager().getProperties(NAMESPACE);
                if (config.getProperty("keepextension", "false").equalsIgnoreCase("true")) {
                    // iterate down
                    String callnumber = pn.getCallNumber();
                    if (callnumber.length() > 1) {
                        pn.setCallNumber(callnumber.substring(0, callnumber.length() - 1));
                        ICaller ca = this.findContact(pn);
                        if (ca != null) {
                            pn.setCallNumber(callnumber);
                            if (ca instanceof IMultiPhoneCaller) {
                                ((IMultiPhoneCaller) ca).getPhonenumbers().clear();
                            }
                            ca.setPhoneNumber(pn);
                            // set extension
                            if (ca.getAttributes().contains(IJAMConst.ATTRIBUTE_NAME_CENTRAL_NUMBER_OF_EXTENSION)) {
                                String centralnumber = ca.getAttribute(IJAMConst.ATTRIBUTE_NAME_CENTRAL_NUMBER_OF_EXTENSION).getValue();
                                if (pn.getTelephoneNumber().length() > centralnumber.length()) {
                                    IAttribute att = getRuntime().getCallerFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_EXTENSION, pn.getTelephoneNumber().substring(centralnumber.length()));
                                    ca.setAttribute(att);
                                }
                            }
                            if (this.m_logger.isLoggable(Level.INFO)) {
                                this.m_logger.info("Caller match by central number: " + ca.toString());
                            }
                            return ca;
                        }
                    }
                }
            }
        } catch (SQLException e) {
            this.m_logger.log(Level.SEVERE, e.toString(), e);
        }
    }
    this.m_logger.info("Caller not identified: " + pn.getTelephoneNumber());
    return null;
}
Also used : Message(de.janrufmonitor.exception.Message) SQLException(java.sql.SQLException) ArrayList(java.util.ArrayList) Dispatch(com.jacob.com.Dispatch) Properties(java.util.Properties) ZipArchiveException(de.janrufmonitor.repository.zip.ZipArchiveException) SQLException(java.sql.SQLException) ComFailException(com.jacob.com.ComFailException) Variant(com.jacob.com.Variant) ICaller(de.janrufmonitor.framework.ICaller) ICallerList(de.janrufmonitor.framework.ICallerList) ActiveXComponent(com.jacob.activeX.ActiveXComponent) IAttribute(de.janrufmonitor.framework.IAttribute) ArrayList(java.util.ArrayList) ICallerList(de.janrufmonitor.framework.ICallerList) List(java.util.List) IMultiPhoneCaller(de.janrufmonitor.framework.IMultiPhoneCaller) UUID(de.janrufmonitor.util.uuid.UUID) ComFailException(com.jacob.com.ComFailException) IPhonenumber(de.janrufmonitor.framework.IPhonenumber)

Example 9 with UUID

use of de.janrufmonitor.util.uuid.UUID in project janrufmonitor by tbrandt77.

the class InfoDialog method createDialogArea.

protected Control createDialogArea(Composite parent) {
    Composite composite = new Composite(parent, SWT.NONE);
    composite.setLayout(new GridLayout(3, false));
    GridData gd = new GridData(GridData.FILL_BOTH);
    gd.horizontalIndent = 15;
    gd.verticalIndent = 15;
    composite.setLayoutData(gd);
    gd = new GridData(GridData.FILL_BOTH);
    gd.horizontalSpan = 2;
    FontData fd = parent.getFont().getFontData()[0];
    fd.setStyle(SWT.BOLD);
    fd.setHeight(11);
    Font font = new Font(parent.getDisplay(), fd);
    Label l = new Label(composite, SWT.NONE);
    l.setText("jAnrufmonitor");
    l.setFont(font);
    l.setLayoutData(gd);
    gd = new GridData(GridData.FILL_BOTH);
    gd.verticalSpan = 8;
    // check for edition
    String edition = getI18nManager().getString(NAMESPACE, "edition", "label", getLanguage());
    if (edition != null && edition.trim().length() > 0 && !edition.equalsIgnoreCase("edition"))
        l.setText(l.getText() + " " + edition);
    l = new Label(composite, SWT.NONE);
    l.setImage(SWTImageManager.getInstance(this.getRuntime()).get(IJAMConst.IMAGE_KEY_TELEFON_JPG));
    l.setLayoutData(gd);
    fd = parent.getFont().getFontData()[0];
    fd.setStyle(SWT.BOLD);
    font = new Font(parent.getDisplay(), fd);
    l = new Label(composite, SWT.NONE);
    l.setText(getI18nManager().getString(NAMESPACE, "license", "label", getLanguage()));
    l.setFont(font);
    new Label(composite, SWT.NONE).setText(getI18nManager().getString(NAMESPACE, "freeware", "label", getLanguage()));
    l = new Label(composite, SWT.NONE);
    l.setText(getI18nManager().getString(NAMESPACE, "version", "label", getLanguage()));
    l.setFont(font);
    new Label(composite, SWT.NONE).setText(IJAMConst.VERSION_DISPLAY);
    l = new Label(composite, SWT.NONE);
    l.setText(getI18nManager().getString(NAMESPACE, "build", "label", getLanguage()));
    l.setFont(font);
    new Label(composite, SWT.NONE).setText(IJAMConst.VERSION_BUILD);
    l = new Label(composite, SWT.NONE);
    l.setText(getI18nManager().getString(NAMESPACE, "rkey", "label", getLanguage()));
    l.setFont(font);
    String key = getRuntime().getConfigManagerFactory().getConfigManager().getProperty("service.update.UpdateManager", "regkey");
    if (key == null || key.length() == 0) {
        key = new UUID().toString();
        getRuntime().getConfigManagerFactory().getConfigManager().setProperty("service.update.UpdateManager", "regkey", key);
        getRuntime().getConfigManagerFactory().getConfigManager().saveConfiguration();
    }
    HyperLink hl = new HyperLink(composite, SWT.NONE);
    hl.setText(key);
    final String rkey = key;
    hl.addMouseListener(new MouseAdapter() {

        public void mouseDown(MouseEvent e) {
            if (e.button == 1)
                Program.launch("https://www.janrufmonitor.de/registry.php?k=" + rkey);
        }
    });
    new Label(composite, SWT.NONE);
    new Label(composite, SWT.NONE);
    l = new Label(composite, SWT.NONE);
    l.setText(getI18nManager().getString(NAMESPACE, "homepage", "label", getLanguage()));
    l.setFont(font);
    hl = new HyperLink(composite, SWT.NONE);
    hl.setText("https://www.janrufmonitor.de/");
    hl.addMouseListener(new MouseAdapter() {

        public void mouseDown(MouseEvent e) {
            if (e.button == 1)
                Program.launch("https://www.janrufmonitor.de/");
        }
    });
    l = new Label(composite, SWT.NONE);
    l.setText(getI18nManager().getString(NAMESPACE, "mail", "label", getLanguage()));
    l.setFont(font);
    hl = new HyperLink(composite, SWT.NONE);
    hl.setText("support@janrufmonitor.de");
    hl.addMouseListener(new MouseAdapter() {

        public void mouseDown(MouseEvent e) {
            if (e.button == 1)
                Program.launch("https://www.janrufmonitor.de/support/");
        }
    });
    l = new Label(composite, SWT.NONE);
    l.setText(getI18nManager().getString(NAMESPACE, "donation", "label", getLanguage()));
    l.setFont(font);
    hl = new HyperLink(composite, SWT.NONE);
    hl.setText("https://www.janrufmonitor.de/donation/");
    hl.addMouseListener(new MouseAdapter() {

        public void mouseDown(MouseEvent e) {
            if (e.button == 1)
                Program.launch("https://www.janrufmonitor.de/ihre-unterstuetzung/");
        }
    });
    new Label(composite, SWT.NONE);
    new Label(composite, SWT.NONE);
    gd = new GridData(GridData.FILL_BOTH);
    gd.horizontalSpan = 3;
    gd.widthHint = 300;
    l = new Label(composite, SWT.RIGHT);
    l.setText("(c) 2008 - 2018 by Thilo Brandt      ");
    l.setLayoutData(gd);
    return super.createDialogArea(parent);
}
Also used : GridLayout(org.eclipse.swt.layout.GridLayout) MouseEvent(org.eclipse.swt.events.MouseEvent) Composite(org.eclipse.swt.widgets.Composite) FontData(org.eclipse.swt.graphics.FontData) GridData(org.eclipse.swt.layout.GridData) Label(org.eclipse.swt.widgets.Label) MouseAdapter(org.eclipse.swt.events.MouseAdapter) UUID(de.janrufmonitor.util.uuid.UUID) HyperLink(de.janrufmonitor.ui.jface.application.controls.HyperLink) Font(org.eclipse.swt.graphics.Font)

Example 10 with UUID

use of de.janrufmonitor.util.uuid.UUID in project janrufmonitor by tbrandt77.

the class MacAddressBookProxy method findContact.

@SuppressWarnings("unchecked")
public synchronized ICaller findContact(IPhonenumber pn) throws MacAddressBookProxyException {
    ICaller c = Identifier.identifyDefault(getRuntime(), pn);
    if (c == null && PhonenumberAnalyzer.getInstance(getRuntime()).isInternal(pn)) {
        IPhonenumber p = getRuntime().getCallerFactory().createInternalPhonenumber(pn.getTelephoneNumber());
        c = getRuntime().getCallerFactory().createCaller(p);
    }
    if (c != null) {
        if (PhonenumberAnalyzer.getInstance(getRuntime()).isInternal(pn)) {
            IPhonenumber p = getRuntime().getCallerFactory().createInternalPhonenumber(pn.getTelephoneNumber());
            c.setPhoneNumber(p);
        }
        pn = c.getPhoneNumber();
        try {
            List uuids = this.m_dbh.select(pn.getIntAreaCode(), pn.getAreaCode(), pn.getCallNumber());
            if (this.m_logger.isLoggable(Level.INFO)) {
                this.m_logger.info("List of found UUIDs: " + uuids);
            }
            if (uuids.size() > 0) {
                String uuid = null;
                for (int k = 0; k < uuids.size(); k++) {
                    uuid = (String) uuids.get(k);
                    List uids = new ArrayList();
                    uids.add(uuid);
                    List contacts = getRecordsByUIDs(uids);
                    if (contacts.size() > 0) {
                        Object contact = contacts.get(0);
                        ICallerList cl = getRuntime().getCallerFactory().createCallerList(2);
                        if (contact instanceof Map<?, ?>) {
                            ICaller businessCaller, privateCaller = null;
                            privateCaller = MacAddressBookMappingManager.getInstance().mapToJamCaller((Map<?, ?>) contact, new PrivateMacAddressBookMapping());
                            businessCaller = MacAddressBookMappingManager.getInstance().mapToJamCaller((Map<?, ?>) contact, new BusinessMacAddressBookMapping());
                            if (privateCaller == null && businessCaller != null) {
                                cl.add(businessCaller);
                            }
                            if (privateCaller != null && businessCaller == null) {
                                cl.add(privateCaller);
                            }
                            if (privateCaller != null && businessCaller != null) {
                                if (((IMultiPhoneCaller) businessCaller).getPhonenumbers().size() == 1) {
                                    // only one entry available
                                    IPhonenumber pn1 = (IPhonenumber) ((IMultiPhoneCaller) businessCaller).getPhonenumbers().get(0);
                                    IAttribute numbertype = businessCaller.getAttribute(IMacAddressBookNumberMapping.MAPPING_ATTTRIBUTE_ID + pn1.getTelephoneNumber());
                                    if (numbertype != null && numbertype.getValue().equalsIgnoreCase(IMacAddressBookConst.MOBILE)) {
                                        this.m_logger.info("Bussiness caller will be dropped. Only mobile number available, but still in private contact: " + businessCaller);
                                        businessCaller = null;
                                    }
                                }
                                if (((IMultiPhoneCaller) privateCaller).getPhonenumbers().size() == 1 && businessCaller != null) {
                                    // only one entry available
                                    IPhonenumber pn1 = (IPhonenumber) ((IMultiPhoneCaller) privateCaller).getPhonenumbers().get(0);
                                    IAttribute numbertype = privateCaller.getAttribute(IMacAddressBookNumberMapping.MAPPING_ATTTRIBUTE_ID + pn1.getTelephoneNumber());
                                    if (numbertype != null && numbertype.getValue().equalsIgnoreCase(IMacAddressBookConst.MOBILE)) {
                                        this.m_logger.info("Private caller will be dropped. Only mobile number available, but still in business contact: " + privateCaller);
                                        privateCaller = null;
                                    }
                                }
                                if (privateCaller != null) {
                                    cl.add(privateCaller);
                                }
                                if (businessCaller != null) {
                                    cl.add(businessCaller);
                                }
                            }
                        }
                        if (cl.size() == 1) {
                            ICaller rc = cl.get(0);
                            rc.setUUID(new UUID().toString());
                            if (rc instanceof IMultiPhoneCaller) {
                                ((IMultiPhoneCaller) rc).getPhonenumbers().clear();
                            }
                            rc.setPhoneNumber(pn);
                            IAttribute att = getRuntime().getCallerFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_CENTRAL_NUMBER_OF_EXTENSION, pn.getTelephoneNumber());
                            rc.setAttribute(att);
                            if (this.m_logger.isLoggable(Level.INFO)) {
                                this.m_logger.info("Exact caller match: " + rc.toString());
                            }
                            return rc;
                        }
                        if (cl.size() == 2) {
                            ICaller rc = null;
                            for (int x = 0; x < cl.size(); x++) {
                                rc = cl.get(x);
                                if (rc instanceof IMultiPhoneCaller) {
                                    List phones = ((IMultiPhoneCaller) rc).getPhonenumbers();
                                    IPhonenumber p = null;
                                    for (int z = 0; z < phones.size(); z++) {
                                        p = (IPhonenumber) phones.get(z);
                                        if (p.getIntAreaCode().equalsIgnoreCase(pn.getIntAreaCode()) && p.getAreaCode().equalsIgnoreCase(pn.getAreaCode()) && pn.getCallNumber().startsWith(p.getCallNumber())) {
                                            if (this.m_logger.isLoggable(Level.INFO)) {
                                                this.m_logger.info("Caller match (IMultiPhoneCaller): " + rc.toString());
                                            }
                                            rc.setUUID(new UUID().toString());
                                            if (rc instanceof IMultiPhoneCaller) {
                                                ((IMultiPhoneCaller) rc).getPhonenumbers().clear();
                                            }
                                            rc.setPhoneNumber(p);
                                            return rc;
                                        }
                                    }
                                } else {
                                    if (rc.getPhoneNumber().getIntAreaCode().equalsIgnoreCase(pn.getIntAreaCode()) && rc.getPhoneNumber().getAreaCode().equalsIgnoreCase(pn.getAreaCode()) && pn.getCallNumber().startsWith(rc.getPhoneNumber().getCallNumber())) {
                                        if (this.m_logger.isLoggable(Level.INFO)) {
                                            this.m_logger.info("Caller match (ICaller): " + rc.toString());
                                        }
                                        return rc;
                                    }
                                }
                            }
                        }
                    }
                }
            } else {
                Properties config = this.getRuntime().getConfigManagerFactory().getConfigManager().getProperties(NAMESPACE);
                if (config.getProperty("keepextension", "false").equalsIgnoreCase("true")) {
                    // iterate down
                    String callnumber = pn.getCallNumber();
                    if (callnumber.length() > 1) {
                        pn.setCallNumber(callnumber.substring(0, callnumber.length() - 1));
                        ICaller ca = this.findContact(pn);
                        if (ca != null) {
                            pn.setCallNumber(callnumber);
                            if (ca instanceof IMultiPhoneCaller) {
                                ((IMultiPhoneCaller) ca).getPhonenumbers().clear();
                            }
                            ca.setPhoneNumber(pn);
                            // set extension
                            if (ca.getAttributes().contains(IJAMConst.ATTRIBUTE_NAME_CENTRAL_NUMBER_OF_EXTENSION)) {
                                String centralnumber = ca.getAttribute(IJAMConst.ATTRIBUTE_NAME_CENTRAL_NUMBER_OF_EXTENSION).getValue();
                                if (pn.getTelephoneNumber().length() > centralnumber.length()) {
                                    IAttribute att = getRuntime().getCallerFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_EXTENSION, pn.getTelephoneNumber().substring(centralnumber.length()));
                                    ca.setAttribute(att);
                                }
                            }
                            if (this.m_logger.isLoggable(Level.INFO)) {
                                this.m_logger.info("Caller match by central number: " + ca.toString());
                            }
                            return ca;
                        }
                    }
                }
            }
        } catch (SQLException e) {
            this.m_logger.log(Level.SEVERE, e.toString(), e);
        }
    }
    this.m_logger.info("Caller not identified: " + pn.getTelephoneNumber());
    return null;
}
Also used : PrivateMacAddressBookMapping(de.janrufmonitor.repository.mapping.PrivateMacAddressBookMapping) SQLException(java.sql.SQLException) ArrayList(java.util.ArrayList) Properties(java.util.Properties) ICaller(de.janrufmonitor.framework.ICaller) ICallerList(de.janrufmonitor.framework.ICallerList) IAttribute(de.janrufmonitor.framework.IAttribute) ArrayList(java.util.ArrayList) ICallerList(de.janrufmonitor.framework.ICallerList) List(java.util.List) IMultiPhoneCaller(de.janrufmonitor.framework.IMultiPhoneCaller) BusinessMacAddressBookMapping(de.janrufmonitor.repository.mapping.BusinessMacAddressBookMapping) UUID(de.janrufmonitor.util.uuid.UUID) HashMap(java.util.HashMap) Map(java.util.Map) IPhonenumber(de.janrufmonitor.framework.IPhonenumber)

Aggregations

UUID (de.janrufmonitor.util.uuid.UUID)13 ICaller (de.janrufmonitor.framework.ICaller)10 IPhonenumber (de.janrufmonitor.framework.IPhonenumber)9 SQLException (java.sql.SQLException)9 List (java.util.List)9 IAttribute (de.janrufmonitor.framework.IAttribute)8 ArrayList (java.util.ArrayList)8 ICallerList (de.janrufmonitor.framework.ICallerList)6 IMultiPhoneCaller (de.janrufmonitor.framework.IMultiPhoneCaller)6 SerializerException (de.janrufmonitor.util.io.SerializerException)4 PreparedStatement (java.sql.PreparedStatement)4 Properties (java.util.Properties)4 IAttributeMap (de.janrufmonitor.framework.IAttributeMap)2 ActiveXComponent (com.jacob.activeX.ActiveXComponent)1 ComFailException (com.jacob.com.ComFailException)1 Dispatch (com.jacob.com.Dispatch)1 Variant (com.jacob.com.Variant)1 Message (de.janrufmonitor.exception.Message)1 ICall (de.janrufmonitor.framework.ICall)1 ICallList (de.janrufmonitor.framework.ICallList)1