Search in sources :

Example 16 with ICip

use of de.janrufmonitor.framework.ICip in project janrufmonitor by tbrandt77.

the class FritzBoxCallListImporter method doImport.

public ICallList doImport() {
    m_callList = PIMRuntime.getInstance().getCallFactory().createCallList();
    try {
        FileInputStream fin = new FileInputStream(m_filename);
        List result = this.getRawCallList(fin);
        if (result.size() > 0) {
            FritzBoxCallCsv call = null;
            Properties conf = PIMRuntime.getInstance().getConfigManagerFactory().getConfigManager().getProperties(FritzBoxMonitor.NAMESPACE);
            ICall c = null;
            for (int i = 0, j = result.size(); i < j; i++) {
                call = new FritzBoxCallCsv((String) result.get(i), conf);
                c = call.toCall();
                if (c != null) {
                    if (!m_callList.contains(c))
                        m_callList.add(c);
                    else {
                        this.m_logger.warning("Call already imported from FritzBox: " + c.toString());
                        c.setUUID(c.getUUID() + "-1");
                        ICip cip = c.getCIP();
                        // just a dirty hack
                        cip.setCIP("4");
                        c.setCIP(cip);
                        if (!m_callList.contains(c))
                            m_callList.add(c);
                    }
                }
            }
        }
    } catch (FileNotFoundException e) {
        this.m_logger.severe("File not found: " + m_filename);
    } catch (IOException e) {
        this.m_logger.severe("IO Error on file " + m_filename + ": " + e.getMessage());
    }
    if (m_callList != null && m_callList.size() > 0) {
        if (m_logger.isLoggable(Level.INFO))
            m_logger.info("Processing modifier services on call list: " + PIMRuntime.getInstance().getServiceFactory().getModifierServices());
        processModifierServices(m_callList);
    }
    return m_callList;
}
Also used : FritzBoxCallCsv(de.janrufmonitor.fritzbox.FritzBoxCallCsv) ICall(de.janrufmonitor.framework.ICall) ICip(de.janrufmonitor.framework.ICip) FileNotFoundException(java.io.FileNotFoundException) ICallList(de.janrufmonitor.framework.ICallList) ArrayList(java.util.ArrayList) List(java.util.List) IOException(java.io.IOException) Properties(java.util.Properties) FileInputStream(java.io.FileInputStream)

Example 17 with ICip

use of de.janrufmonitor.framework.ICip in project janrufmonitor by tbrandt77.

the class SynchronizerService method synchronize.

public void synchronize(IProgressMonitor progressMonitor) {
    if (m_activeSync)
        return;
    this.m_activeSync = true;
    long start = System.currentTimeMillis();
    if (m_logger.isLoggable(Level.INFO))
        m_logger.info("--> Start Synchronizing (" + (progressMonitor == null ? "w/o progress monitor" : "with progress monitor") + ")");
    if (this.m_tamMap == null)
        this.m_tamMap = new HashMap();
    this.m_tamMap.clear();
    if (progressMonitor != null) {
        progressMonitor.beginTask(getI18nManager().getString(getNamespace(), "refreshprogress", "label", getLanguage()), IProgressMonitor.UNKNOWN);
        progressMonitor.worked(1);
        progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "loginprogress", "label", getLanguage()));
    }
    try {
        Thread.sleep((progressMonitor != null ? 500 : 100));
    } catch (InterruptedException e1) {
        m_logger.log(Level.SEVERE, e1.getMessage(), e1);
    }
    FirmwareManager fwm = FirmwareManager.getInstance();
    // fwm.startup();
    try {
        if (!fwm.isLoggedIn())
            fwm.login();
        if (progressMonitor != null)
            progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "getprogress", "label", getLanguage()));
        try {
            Thread.sleep((progressMonitor != null ? 1500 : 100));
        } catch (InterruptedException e1) {
            m_logger.log(Level.SEVERE, e1.getMessage(), e1);
        }
        long synctime = Long.parseLong(SynchronizerService.this.m_configuration.getProperty(CFG_SYNCTIME, "-1"));
        long oldestCallTime = -1;
        // added: 2013/02/04: check sync all
        boolean syncall = SynchronizerService.this.m_configuration.getProperty(CFG_SYNCALL, "false").equalsIgnoreCase("true");
        if (syncall) {
            synctime = -1;
            if (m_logger.isLoggable(Level.INFO))
                m_logger.info("Sync all option enabled.");
        }
        // sub getSynctimeOffset from time
        if (synctime > 0) {
            if (m_logger.isLoggable(Level.INFO))
                m_logger.info("Sync timestamp before decrementing offset: " + synctime);
            synctime -= this.getSyncTimeOffset();
            if (m_logger.isLoggable(Level.INFO))
                m_logger.info("Sync timestamp after decrementing offset: " + synctime);
        }
        if (m_logger.isLoggable(Level.INFO))
            m_logger.info("Syncing call list from FRITZ!Box with timestamp: " + synctime);
        List result = fwm.getCallList(synctime);
        if (m_logger.isLoggable(Level.INFO))
            m_logger.info("Call list size from FRITZ!Box: " + result.size());
        if (result.size() > 0) {
            ICallList m_callList = PIMRuntime.getInstance().getCallFactory().createCallList(result.size());
            List m_prefilteredList = new ArrayList(result.size());
            FritzBoxCallCsv call = null;
            Properties conf = PIMRuntime.getInstance().getConfigManagerFactory().getConfigManager().getProperties(FritzBoxMonitor.NAMESPACE);
            ICall c = null;
            FritzBoxUUIDManager.getInstance().init();
            boolean skipOutgoing = !Boolean.parseBoolean(conf.getProperty(CFG_OUTGOING, "false"));
            for (int i = 0, j = result.size(); i < j; i++) {
                call = new FritzBoxCallCsv((String) result.get(i), conf);
                // added 2016/01/11: check if outgoing call applicable
                if (call != null) {
                    if (call.isOutgoingCall() && skipOutgoing) {
                        if (m_logger.isLoggable(Level.INFO))
                            m_logger.info("Call import skipped by call state (outgoing) from FRITZ!Box.");
                        continue;
                    }
                    Date calltime = call.getPrecalculatedDate();
                    if (calltime != null && calltime.getTime() < synctime && synctime > 0) {
                        if (m_logger.isLoggable(Level.INFO))
                            m_logger.info("Call import skipped by timestamp (last sync time: " + new Date(synctime).toString() + ", call time: " + calltime.toString() + ") from FRITZ!Box.");
                        continue;
                    }
                    if (calltime != null && synctime < 0) {
                        if (oldestCallTime == -1)
                            oldestCallTime = calltime.getTime();
                        if (oldestCallTime > calltime.getTime())
                            oldestCallTime = calltime.getTime();
                        if (m_logger.isLoggable(Level.INFO))
                            m_logger.info("Set oldest call time to: " + new Date(oldestCallTime).toString());
                    }
                    m_prefilteredList.add(call);
                }
            }
            if (m_prefilteredList.size() > 0) {
                if (progressMonitor != null)
                    progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "identifyprogress", "label", getLanguage()));
                try {
                    Thread.sleep((progressMonitor != null ? 1000 : 100));
                } catch (InterruptedException e1) {
                    m_logger.log(Level.SEVERE, e1.getMessage(), e1);
                }
                for (int i = 0, j = m_prefilteredList.size(); i < j; i++) {
                    c = ((FritzBoxCallCsv) m_prefilteredList.get(i)).toCall();
                    if (c != null) {
                        if (getRuntime().getMsnManager().isMsnMonitored(c.getMSN())) {
                            if (progressMonitor != null) {
                                progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "processing", "label", getLanguage()) + Formatter.getInstance(this.getRuntime()).parse(IJAMConst.GLOBAL_VARIABLE_CALLERNUMBER, c));
                                try {
                                    Thread.sleep(75);
                                } catch (InterruptedException e1) {
                                    m_logger.log(Level.SEVERE, e1.getMessage(), e1);
                                }
                            }
                            if (!m_callList.contains(c)) {
                                if (m_logger.isLoggable(Level.INFO))
                                    m_logger.info("Adding call imported from FRITZ!Box: " + c.toString());
                                m_callList.add(c);
                            } else {
                                if (m_logger.isLoggable(Level.WARNING))
                                    m_logger.warning("Adding duplicated call imported from FRITZ!Box: " + c.toString());
                                c.setUUID(c.getUUID() + "-1");
                                ICip cip = c.getCIP();
                                // just a dirty hack
                                cip.setCIP("4");
                                c.setCIP(cip);
                                if (!m_callList.contains(c))
                                    m_callList.add(c);
                                else {
                                    c.setUUID(c.getUUID() + "-1");
                                    if (!m_callList.contains(c))
                                        m_callList.add(c);
                                }
                            }
                        }
                    }
                }
            }
            if (m_callList != null && m_callList.size() > 0) {
                if (progressMonitor != null)
                    progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "geocodeprogress", "label", getLanguage()));
                try {
                    Thread.sleep((progressMonitor != null ? 1000 : 100));
                } catch (InterruptedException e1) {
                    m_logger.log(Level.SEVERE, e1.getMessage(), e1);
                }
                boolean synctam = SynchronizerService.this.m_configuration.getProperty(CFG_SYNCTAM, "false").equalsIgnoreCase("true");
                if (synctam) {
                    if (m_logger.isLoggable(Level.INFO))
                        m_logger.info("Sync TAM recordings: " + Boolean.toString(synctam));
                    if (progressMonitor != null)
                        progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "tamprogress", "label", getLanguage()));
                    this.m_tamMap.putAll(fwm.getTamMessages(synctime));
                    try {
                        Thread.sleep((progressMonitor != null ? 1000 : 100));
                    } catch (InterruptedException e1) {
                        m_logger.log(Level.SEVERE, e1.getMessage(), e1);
                    }
                }
                if (m_logger.isLoggable(Level.INFO))
                    m_logger.info("Processing modifier services on call list: " + getRuntime().getServiceFactory().getModifierServices());
                processModifierServices(m_callList, progressMonitor);
                if (progressMonitor != null)
                    progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "synchprogress", "label", getLanguage()));
                try {
                    Thread.sleep((progressMonitor != null ? 1000 : 100));
                } catch (InterruptedException e1) {
                    m_logger.log(Level.SEVERE, e1.getMessage(), e1);
                }
                String repository = getRuntime().getConfigManagerFactory().getConfigManager().getProperty(Journal.NAMESPACE, "repository");
                ICallManager cm = getRuntime().getCallManagerFactory().getCallManager(repository);
                if (cm != null && cm.isActive() && cm.isSupported(IWriteCallRepository.class)) {
                    ICall ca = null;
                    boolean syncclean = SynchronizerService.this.m_configuration.getProperty(CFG_SYNCCLEAN, "false").equalsIgnoreCase("true");
                    if (synctime < 0) {
                        if (m_logger.isLoggable(Level.INFO))
                            m_logger.info("Set syntime to oldest call time to eliminate duplicates.");
                        synctime = oldestCallTime;
                    }
                    if (syncclean && synctime > 0 && cm.isSupported(IReadCallRepository.class) && cm.isSupported(IWriteCallRepository.class)) {
                        if (m_logger.isLoggable(Level.INFO))
                            m_logger.info("Remove duplicated entries (sync clean) option enabled.");
                        if (progressMonitor != null)
                            progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "syncclean", "label", getLanguage()));
                        try {
                            Thread.sleep((progressMonitor != null ? 500 : 100));
                        } catch (InterruptedException e1) {
                            m_logger.log(Level.SEVERE, e1.getMessage(), e1);
                        }
                        IFilter syncFilter = new DateFilter(new Date(System.currentTimeMillis()), new Date(synctime));
                        ICallList cl = ((IReadCallRepository) cm).getCalls(syncFilter);
                        if (cl.size() > 0) {
                            // 2009/03/18: added backup of cleaned calls
                            IImExporter exp = ImExportFactory.getInstance().getExporter("DatFileCallExporter");
                            if (exp != null & exp instanceof ICallExporter) {
                                if (m_logger.isLoggable(Level.INFO))
                                    m_logger.info("Creating backup of cleaned call list...");
                                File backupdir = new File(PathResolver.getInstance(getRuntime()).getDataDirectory(), "fritzbox-sync-clean-backup");
                                if (!backupdir.exists()) {
                                    backupdir.mkdirs();
                                }
                                File backupfile = new File(backupdir, Long.toString(synctime) + ".dat");
                                ((ICallExporter) exp).setFilename(backupfile.getAbsolutePath());
                                ((ICallExporter) exp).setCallList(cl);
                                if (((ICallExporter) exp).doExport()) {
                                    if (m_logger.isLoggable(Level.INFO))
                                        m_logger.info("Backup of cleaned call list successfully finished: " + backupfile.getAbsolutePath());
                                } else {
                                    if (m_logger.isLoggable(Level.WARNING))
                                        m_logger.warning("Backup of cleaned call list failed: " + backupdir.getAbsolutePath());
                                }
                            }
                            ((IWriteCallRepository) cm).removeCalls(createRedundancyList(m_callList, synctime));
                            try {
                                Thread.sleep(500);
                            } catch (InterruptedException e) {
                            }
                        }
                    }
                    for (int i = 0, j = m_callList.size(); i < j; i++) {
                        ca = m_callList.get(i);
                        try {
                            ((IWriteCallRepository) cm).setCall(ca);
                            if (progressMonitor != null) {
                                progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "processing2", "label", getLanguage()) + Formatter.getInstance(this.getRuntime()).parse(IJAMConst.GLOBAL_VARIABLE_CALLERNAME, ca));
                                try {
                                    Thread.sleep(50);
                                } catch (InterruptedException e1) {
                                    m_logger.log(Level.SEVERE, e1.getMessage(), e1);
                                }
                            }
                            if (m_logger.isLoggable(Level.INFO))
                                m_logger.info("Call imported to repository: " + ca.toString());
                        } catch (Exception e) {
                            if (m_logger.isLoggable(Level.WARNING))
                                m_logger.warning("Call already in repository (skipped): " + ca.toString());
                        }
                    }
                    // added 2009/01/08: force refresh of journal, if opened
                    IEventBroker evtBroker = getRuntime().getEventBroker();
                    evtBroker.register(this);
                    evtBroker.send(this, evtBroker.createEvent(IEventConst.EVENT_TYPE_CALL_MANAGER_UPDATED));
                    evtBroker.unregister(this);
                    if (m_logger.isLoggable(Level.INFO))
                        m_logger.info("EventBroker notification sent: EVENT_TYPE_CALL_MANAGER_UPDATED");
                }
                boolean syncDelete = (m_configuration.getProperty(FritzBoxConst.CFG_SYNCDELETE, "false").equalsIgnoreCase("true") ? true : false);
                if (syncDelete) {
                    if (m_logger.isLoggable(Level.INFO))
                        m_logger.info("Delete after sync (sync delete) option enabled.");
                    if (progressMonitor != null)
                        progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "deleteprogress", "label", getLanguage()));
                    fwm.deleteCallList();
                }
                // added 2009/01/07: send mail notification after sync with fritzbox
                boolean syncNotify = (SynchronizerService.this.m_configuration.getProperty(FritzBoxConst.CFG_SYNC_NOTIFICATION, "false").equalsIgnoreCase("true") ? true : false);
                if (syncNotify) {
                    if (m_logger.isLoggable(Level.INFO))
                        m_logger.info("Send notification after sync (sync notification) option enabled.");
                    ICall ca = null;
                    if (progressMonitor != null)
                        progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "sendnotificationprogress", "label", getLanguage()));
                    for (int i = 0, j = m_callList.size(); i < j; i++) {
                        ca = m_callList.get(i);
                        sendMailNotification(ca);
                    }
                }
            }
            String text = getI18nManager().getString(getNamespace(), "finished", "label", getLanguage());
            if (m_callList.size() == 0)
                text = getI18nManager().getString(getNamespace(), "finished0", "label", getLanguage());
            if (m_callList.size() == 1)
                text = getI18nManager().getString(getNamespace(), "finished1", "label", getLanguage());
            if (progressMonitor != null)
                progressMonitor.setTaskName(StringUtils.replaceString(text, "{%1}", Integer.toString(m_callList.size())));
            if (m_callList.size() > 0)
                PropagationFactory.getInstance().fire(new Message(Message.INFO, getI18nManager().getString("monitor.FritzBoxMonitor", "title", "label", getLanguage()), new Exception(StringUtils.replaceString(text, "{%1}", Integer.toString(m_callList.size())))), "Tray");
            SynchronizerService.this.m_configuration.setProperty(CFG_SYNCTIME, Long.toString(System.currentTimeMillis()));
            getRuntime().getConfigManagerFactory().getConfigManager().setProperties(NAMESPACE, SynchronizerService.this.m_configuration);
            getRuntime().getConfigManagerFactory().getConfigManager().saveConfiguration();
            if (progressMonitor != null)
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e1) {
                    m_logger.log(Level.SEVERE, e1.getMessage(), e1);
                }
        } else {
            // no results from FB list
            if (progressMonitor != null)
                progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "noresults", "label", getLanguage()));
            try {
                Thread.sleep((progressMonitor != null ? 1500 : 100));
            } catch (InterruptedException e1) {
                m_logger.log(Level.SEVERE, e1.getMessage(), e1);
            }
        }
    } catch (IOException e) {
        m_logger.warning(e.toString());
        PropagationFactory.getInstance().fire(new Message(Message.ERROR, getNamespace(), "failedrefresh", e));
    } catch (FritzBoxLoginException e) {
        m_logger.warning(e.toString());
    } catch (GetCallListException e) {
        m_logger.warning(e.toString());
        PropagationFactory.getInstance().fire(new Message(Message.ERROR, getNamespace(), "failedrefresh", e));
    } catch (DeleteCallListException e) {
        m_logger.warning(e.toString());
        PropagationFactory.getInstance().fire(new Message(Message.ERROR, getNamespace(), "failedrefresh", e));
    } catch (CloneNotSupportedException e) {
        m_logger.warning(e.toString());
    } finally {
        if (progressMonitor != null)
            progressMonitor.done();
        this.m_activeSync = false;
    }
    if (m_logger.isLoggable(Level.INFO))
        m_logger.info("--> Finished Synchronizing (" + (progressMonitor == null ? "w/o progress monitor" : "with progress monitor") + ") in " + ((System.currentTimeMillis() - start) / 1000) + " sec.");
}
Also used : Message(de.janrufmonitor.exception.Message) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Properties(java.util.Properties) ICallManager(de.janrufmonitor.repository.ICallManager) ICallList(de.janrufmonitor.framework.ICallList) IImExporter(de.janrufmonitor.repository.imexport.IImExporter) ICallList(de.janrufmonitor.framework.ICallList) List(java.util.List) ArrayList(java.util.ArrayList) DateFilter(de.janrufmonitor.repository.filter.DateFilter) IEventBroker(de.janrufmonitor.framework.event.IEventBroker) IReadCallRepository(de.janrufmonitor.repository.types.IReadCallRepository) ICallExporter(de.janrufmonitor.repository.imexport.ICallExporter) FritzBoxLoginException(de.janrufmonitor.fritzbox.firmware.exception.FritzBoxLoginException) ICall(de.janrufmonitor.framework.ICall) ICip(de.janrufmonitor.framework.ICip) GetCallListException(de.janrufmonitor.fritzbox.firmware.exception.GetCallListException) IOException(java.io.IOException) Date(java.util.Date) IWriteCallRepository(de.janrufmonitor.repository.types.IWriteCallRepository) InvocationTargetException(java.lang.reflect.InvocationTargetException) DeleteCallListException(de.janrufmonitor.fritzbox.firmware.exception.DeleteCallListException) GetCallListException(de.janrufmonitor.fritzbox.firmware.exception.GetCallListException) FritzBoxLoginException(de.janrufmonitor.fritzbox.firmware.exception.FritzBoxLoginException) IOException(java.io.IOException) FritzBoxCallCsv(de.janrufmonitor.fritzbox.FritzBoxCallCsv) FirmwareManager(de.janrufmonitor.fritzbox.firmware.FirmwareManager) IFilter(de.janrufmonitor.repository.filter.IFilter) File(java.io.File) DeleteCallListException(de.janrufmonitor.fritzbox.firmware.exception.DeleteCallListException)

Example 18 with ICip

use of de.janrufmonitor.framework.ICip in project janrufmonitor by tbrandt77.

the class FritzBoxCallCsv method toCall.

public ICall toCall() {
    Logger logger = Logger.getLogger(IJAMConst.DEFAULT_LOGGER);
    if (this.m_line == null || this.m_line.trim().length() == 0) {
        if (logger != null && logger.isLoggable(Level.INFO))
            logger.info("No call data found in CSV line: " + this.m_line);
        return null;
    }
    /**
     * Added 2011/01/05: added do to NumberFormatException in log, remove the header
     *
     * Format: Typ;Datum;Name;Rufnummer;Nebenstelle;Eigene Rufnummer;Dauer
     */
    if (this.m_line.trim().toLowerCase().startsWith("typ;")) {
        if (logger != null && logger.isLoggable(Level.INFO))
            logger.info("Ignore CSV header line: " + this.m_line);
        return null;
    }
    if (this.m_call == null) {
        try {
            IRuntime r = PIMRuntime.getInstance();
            String[] call = this.m_line.split(";");
            if (call.length >= 7) {
                if (logger != null && logger.isLoggable(Level.INFO))
                    logger.info("Tokens in CSV line: " + call.length);
                // create msn
                IMsn msn = r.getCallFactory().createMsn(getMsn(call[5]), "");
                msn.setAdditional(r.getMsnManager().getMsnLabel(msn));
                if (logger != null && logger.isLoggable(Level.INFO))
                    logger.info("MSN set to: " + msn.toString());
                // create caller data
                int state = Integer.parseInt(call[0]);
                if (logger != null && logger.isLoggable(Level.INFO))
                    logger.info("State set to: " + state);
                // added 2016/01/26: ignore incoming active (5) and outgoung active calls (6)
                if (state == 5 || state == 6) {
                    if (logger != null && logger.isLoggable(Level.INFO))
                        logger.info("Ignoring call state: " + state);
                    return null;
                }
                String callByCall = null;
                ICaller caller = null;
                IPhonenumber pn = PhonenumberAnalyzer.getInstance(PIMRuntime.getInstance()).toClirPhonenumber(call[3].trim());
                // if no CLIR call, check internal
                if (pn == null && state != this.getOutgoingState())
                    pn = PhonenumberAnalyzer.getInstance(PIMRuntime.getInstance()).toInternalPhonenumber(call[3].trim(), msn.getMSN());
                // if no internal call, check regular
                if (pn == null && state != this.getOutgoingState()) {
                    // if incoming call does not start with 0, the Provider number seems to have the wrong format
                    // assume it is an international format 4971657110
                    boolean onlyNumbers = call[3].matches("[+-]?[0-9]+");
                    if (!call[3].startsWith("0") && onlyNumbers) {
                        if (logger != null && logger.isLoggable(Level.INFO))
                            logger.info("Assuming international call: " + call[3]);
                        call[3] = "00" + call[3];
                    }
                    pn = PhonenumberAnalyzer.getInstance(PIMRuntime.getInstance()).toPhonenumber(call[3].trim(), msn.getMSN());
                }
                if (pn == null && state == this.getOutgoingState()) {
                    // added 2006/08/10: trim call-by-call information
                    // only can occure on state 3/4 (out-going calls)
                    callByCall = getCallByCall(call[3]);
                    if (callByCall != null) {
                        call[3] = call[3].substring(callByCall.length());
                    }
                    pn = PhonenumberAnalyzer.getInstance(PIMRuntime.getInstance()).toInternalPhonenumber(call[3].trim(), msn.getMSN());
                    if (pn == null) {
                        // requires addition of areacode
                        if (!call[3].startsWith("0")) {
                            if (logger != null && logger.isLoggable(Level.INFO))
                                logger.info("Assuming number " + call[3] + " has missing areacode.");
                            call[3] = PhonenumberAnalyzer.getInstance(PIMRuntime.getInstance()).getAreaCode() + call[3];
                            if (logger != null && logger.isLoggable(Level.INFO))
                                logger.info("Added areacode to number " + call[3]);
                        }
                        pn = PhonenumberAnalyzer.getInstance(PIMRuntime.getInstance()).toPhonenumber(call[3].trim(), msn.getMSN());
                    }
                }
                if (logger != null && logger.isLoggable(Level.INFO))
                    logger.info("Phonenumber set to: " + pn);
                caller = Identifier.identify(r, pn);
                if (caller == null) {
                    caller = r.getCallerFactory().createCaller(r.getCallerFactory().createName("", call[2]), pn);
                    if (logger != null && logger.isLoggable(Level.INFO))
                        logger.info("Setting CSV name field as caller name: " + call[2]);
                }
                // added 2016/01/19: FB Name data if jAnrufmonitor did not find any in his callermanagers
                if (caller.getName().getLastname().length() == 0 && caller.getName().getFirstname().length() == 0 && call[2].trim().length() > 0) {
                    caller.getAttributes().add(r.getCallFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_LASTNAME, call[2]));
                    caller.getAttributes().add(r.getCallFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_CALLERMANAGER, FritzBoxPhonebookManager.ID));
                    caller.getAttributes().remove(IJAMConst.ATTRIBUTE_NAME_CITY);
                }
                // create call data
                SimpleDateFormat sdf = new SimpleDateFormat(this.m_config.getProperty(CFG_DATEFORMAT, "dd.MM.yy HH:mm"));
                Date date = new Date(0);
                try {
                    date = sdf.parse(call[1]);
                } catch (ParseException e) {
                    if (logger != null && logger.isLoggable(Level.SEVERE))
                        logger.severe("Wrong date format detected: " + e.getMessage());
                }
                ICip cip = r.getCallFactory().createCip(getCip(call[4]), "");
                cip.setAdditional(r.getCipManager().getCipLabel(cip, ""));
                if (logger != null && logger.isLoggable(Level.INFO))
                    logger.info("Set CIP to: " + cip);
                // create attributes
                IAttributeMap am = r.getCallFactory().createAttributeMap();
                if (state == 1) {
                    am.add(r.getCallFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_CALLSTATUS, IJAMConst.ATTRIBUTE_VALUE_ACCEPTED));
                } else if (state == this.getOutgoingState()) {
                    am.add(r.getCallFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_CALLSTATUS, IJAMConst.ATTRIBUTE_VALUE_OUTGOING));
                } else if (this.hasRejectedState() && state == this.getRejectedState()) {
                    am.add(r.getCallFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_CALLSTATUS, IJAMConst.ATTRIBUTE_VALUE_REJECTED));
                } else {
                    am.add(r.getCallFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_CALLSTATUS, IJAMConst.ATTRIBUTE_VALUE_MISSED));
                }
                am.add(r.getCallFactory().createAttribute("fritzbox.line", call[4]));
                am.add(r.getCallFactory().createAttribute("fritzbox.duration", Integer.toString(getTime(call[6]))));
                am.add(r.getCallFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_CALL_DURATION, Integer.toString(getTime(call[6]))));
                am.add(r.getCallFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_CALL_ACTIVE_INDICATOR, IJAMConst.ATTRIBUTE_VALUE_NO));
                if (callByCall != null)
                    am.add(r.getCallFactory().createAttribute("fritzbox.callbycall", callByCall));
                if (isSpoofingnumber(call[2])) {
                    if (logger != null && logger.isLoggable(Level.INFO))
                        logger.info("Spoofing number detected: " + call[2]);
                    String sn = getSpoofingnumber(call[2]);
                    IPhonenumber pnx = PhonenumberAnalyzer.getInstance(PIMRuntime.getInstance()).toPhonenumber(sn.trim());
                    ICaller cx = Identifier.identify(r, pnx);
                    if (cx != null) {
                        am.add(r.getCallFactory().createAttribute("fritzbox.spoofing", cx.getPhoneNumber().getIntAreaCode() + ";" + cx.getPhoneNumber().getAreaCode() + ";" + cx.getPhoneNumber().getCallNumber()));
                        am.add(r.getCallFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_SPOOFED, "true"));
                    }
                }
                if (logger != null && logger.isLoggable(Level.INFO))
                    logger.info("Set attributes to: " + am);
                // // create UUID
                // StringBuffer uuid = new StringBuffer();
                // uuid.append(date.getTime());
                // uuid.append("-");
                // uuid.append(pn.getTelephoneNumber());
                // uuid.append("-");
                // uuid.append(msn.getMSN());
                // 
                // if (logger!=null && logger.isLoggable(Level.INFO))
                // logger.info("Set UUID to: "+uuid);
                // 
                // // limit uuid to 32 chars
                // if (uuid.length()>31) {
                // // reduce byte length to append -1 for redundant calls max -1-1 --> 3 calls
                // uuid = new StringBuffer(uuid.substring(0,31));
                // if (logger!=null && logger.isLoggable(Level.INFO))
                // logger.info("Reduce UUID to: "+uuid);
                // }
                this.m_call = r.getCallFactory().createCall(FritzBoxUUIDManager.getInstance().getUUID(date, pn, msn), caller, msn, cip, date);
                this.m_call.setAttributes(am);
            }
        } catch (NumberFormatException ex) {
            if (logger != null && logger.isLoggable(Level.SEVERE))
                logger.log(Level.SEVERE, ex.toString(), ex);
        } catch (Exception ex) {
            if (logger != null && logger.isLoggable(Level.WARNING))
                logger.log(Level.WARNING, ex.toString() + ":" + ex.getMessage() + " : problem with line parsing : " + this.m_line, ex);
            if (ex instanceof NullPointerException)
                if (logger != null && logger.isLoggable(Level.SEVERE))
                    logger.log(Level.SEVERE, ex.toString(), ex);
            return null;
        }
    }
    return this.m_call;
}
Also used : ICip(de.janrufmonitor.framework.ICip) Logger(java.util.logging.Logger) Date(java.util.Date) ParseException(java.text.ParseException) IRuntime(de.janrufmonitor.runtime.IRuntime) ICaller(de.janrufmonitor.framework.ICaller) IAttributeMap(de.janrufmonitor.framework.IAttributeMap) ParseException(java.text.ParseException) IMsn(de.janrufmonitor.framework.IMsn) SimpleDateFormat(java.text.SimpleDateFormat) IPhonenumber(de.janrufmonitor.framework.IPhonenumber)

Example 19 with ICip

use of de.janrufmonitor.framework.ICip in project janrufmonitor by tbrandt77.

the class FritzBoxCallRaw method toCall.

public ICall toCall() {
    if (this.m_line == null || this.m_line.length() == 0)
        return null;
    if (this.m_call == null) {
        IRuntime r = PIMRuntime.getInstance();
        String[] call = this.m_line.split(";");
        if (call.length >= 4 && call[1].equalsIgnoreCase("RING")) {
            // create MSN
            IMsn msn = r.getCallFactory().createMsn(getMsn(call[4]), "");
            msn.setAdditional(r.getMsnManager().getMsnLabel(msn));
            IPhonenumber pn = PhonenumberAnalyzer.getInstance(PIMRuntime.getInstance()).toClirPhonenumber(call[3].trim());
            // if no CLIR call, check internal
            if (pn == null)
                pn = PhonenumberAnalyzer.getInstance(PIMRuntime.getInstance()).toInternalPhonenumber(call[3].trim(), msn.getMSN());
            // if no internal call, check regular
            if (pn == null) {
                // if incoming call does not start with 0, the Provider number seems to have the wrong format
                // assume it is an international format 4971657110
                boolean onlyNumbers = call[3].matches("[+-]?[0-9]+");
                if (!call[3].startsWith("0") && onlyNumbers) {
                    call[3] = "00" + call[3];
                }
                pn = PhonenumberAnalyzer.getInstance(PIMRuntime.getInstance()).toPhonenumber(call[3].trim(), msn.getMSN());
            }
            ICaller caller = r.getCallerFactory().createCaller(pn);
            // create call data
            // added 2009/05/01
            SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yy HH:mm:ss");
            Date date = new Date(0);
            try {
                date = sdf.parse(call[0]);
                date = this.toFritzboxDate(date);
            } catch (ParseException e) {
                Logger.getLogger(IJAMConst.DEFAULT_LOGGER).severe("Wrong standard date format detected.");
                sdf = new SimpleDateFormat(this.m_config.getProperty(CFG_DATEFORMAT, "dd.MM.yy HH:mm"));
                try {
                    date = sdf.parse(call[0]);
                    date = this.toFritzboxDate(date);
                } catch (ParseException ex) {
                    Logger.getLogger(IJAMConst.DEFAULT_LOGGER).severe("Wrong custom date format detected.");
                }
            }
            ICip cip = r.getCallFactory().createCip(getCip(call[5]), "");
            cip.setAdditional(r.getCipManager().getCipLabel(cip, ""));
            // create attributes
            IAttributeMap am = r.getCallFactory().createAttributeMap();
            am.add(r.getCallFactory().createAttribute("fritzbox.key", call[2]));
            am.add(r.getCallFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_CALLSTATUS, IJAMConst.ATTRIBUTE_VALUE_MISSED));
            this.m_call = r.getCallFactory().createCall(FritzBoxUUIDManager.getInstance().calculateUUID(FritzBoxUUIDManager.getInstance().getUUID(date, pn, msn)), caller, msn, cip, date);
            this.m_call.setAttributes(am);
        }
        if (call.length >= 4 && call[1].equalsIgnoreCase("CALL")) {
            // create msn
            String s_msn = null;
            if (call.length >= 7) {
                s_msn = getMsn(call[6]);
                if (s_msn == null || call[6].equalsIgnoreCase(s_msn))
                    s_msn = getMsn(call[4]);
            } else {
                s_msn = getMsn(call[4]);
            }
            IMsn msn = r.getCallFactory().createMsn((s_msn == null ? "" : s_msn), "");
            msn.setAdditional(r.getMsnManager().getMsnLabel(msn));
            // create caller data
            String callByCall = null;
            IPhonenumber pn = PhonenumberAnalyzer.getInstance(PIMRuntime.getInstance()).toClirPhonenumber(call[5].trim());
            // if no CLIR call, check internal
            if (pn == null)
                pn = PhonenumberAnalyzer.getInstance(PIMRuntime.getInstance()).toInternalPhonenumber(call[5].trim(), msn.getMSN());
            // if no internal call, check regular
            if (pn == null) {
                // added 2006/08/10: trim call-by-call information
                // only can occure on state CALL (out-going calls)
                callByCall = getCallByCall(call[5]);
                if (callByCall != null) {
                    call[5] = call[5].substring(callByCall.length());
                }
                // requires addition of areacode
                if (!call[5].startsWith("0")) {
                    Logger.getLogger(IJAMConst.DEFAULT_LOGGER).info("Assuming number " + call[5] + " has missing areacode.");
                    call[5] = PhonenumberAnalyzer.getInstance(PIMRuntime.getInstance()).getAreaCode() + call[5];
                    Logger.getLogger(IJAMConst.DEFAULT_LOGGER).info("Added areacode to number " + call[5]);
                }
                pn = PhonenumberAnalyzer.getInstance(PIMRuntime.getInstance()).toPhonenumber(call[5].trim(), msn.getMSN());
            }
            ICaller caller = r.getCallerFactory().createCaller(pn);
            // create call data
            // added 2009/05/27
            SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yy HH:mm:ss");
            Date date = new Date(0);
            try {
                date = sdf.parse(call[0]);
                date = this.toFritzboxDate(date);
            } catch (ParseException e) {
                Logger.getLogger(IJAMConst.DEFAULT_LOGGER).severe("Wrong standard date format detected.");
                sdf = new SimpleDateFormat(this.m_config.getProperty(CFG_DATEFORMAT, "dd.MM.yy HH:mm"));
                try {
                    date = sdf.parse(call[0]);
                    date = this.toFritzboxDate(date);
                } catch (ParseException ex) {
                    Logger.getLogger(IJAMConst.DEFAULT_LOGGER).severe("Wrong custom date format detected.");
                }
            }
            ICip cip = r.getCallFactory().createCip(getCip(call[6]), "");
            cip.setAdditional(r.getCipManager().getCipLabel(cip, ""));
            // create attributes
            IAttributeMap am = r.getCallFactory().createAttributeMap();
            am.add(r.getCallFactory().createAttribute(IJAMConst.ATTRIBUTE_NAME_CALLSTATUS, IJAMConst.ATTRIBUTE_VALUE_OUTGOING));
            am.add(r.getCallFactory().createAttribute("fritzbox.key", call[2]));
            if (callByCall != null)
                am.add(r.getCallFactory().createAttribute("fritzbox.callbycall", callByCall));
            this.m_call = r.getCallFactory().createCall(FritzBoxUUIDManager.getInstance().calculateUUID(FritzBoxUUIDManager.getInstance().getUUID(date, pn, msn)), caller, msn, cip, date);
            this.m_call.setAttributes(am);
        }
    }
    return this.m_call;
}
Also used : ICaller(de.janrufmonitor.framework.ICaller) ICip(de.janrufmonitor.framework.ICip) IAttributeMap(de.janrufmonitor.framework.IAttributeMap) ParseException(java.text.ParseException) IMsn(de.janrufmonitor.framework.IMsn) SimpleDateFormat(java.text.SimpleDateFormat) Date(java.util.Date) IRuntime(de.janrufmonitor.runtime.IRuntime) IPhonenumber(de.janrufmonitor.framework.IPhonenumber)

Example 20 with ICip

use of de.janrufmonitor.framework.ICip in project janrufmonitor by tbrandt77.

the class AbstractFilterCallManager method filterCalls.

protected ICallList filterCalls(IFilter filter, ICallList cl) {
    if (cl == null) {
        cl = this.getInitialCallList(filter);
    }
    long start = System.currentTimeMillis();
    this.m_logger.info("Start filtering with filter: " + filter);
    this.m_logger.info("CallList size before filtering: " + cl.size());
    ICall c = null;
    if (filter != null) {
        if (filter.getType().equals(FilterType.DATE) || filter.getType().equals(FilterType.YEAR) || filter.getType().equals(FilterType.MONTH_YEAR)) {
            long from = 0;
            long to = 0;
            if (filter instanceof DateFilter) {
                DateFilter df = (DateFilter) filter;
                to = (df.getDateFrom() == null ? 0 : df.getDateFrom().getTime());
                from = df.getDateTo().getTime();
            }
            if (filter instanceof YearFilter) {
                YearFilter df = (YearFilter) filter;
                from = (df.getDateFrom() == null ? 0 : df.getDateFrom().getTime());
                to = df.getDateTo().getTime();
            }
            if (filter instanceof MonthYearFilter) {
                MonthYearFilter df = (MonthYearFilter) filter;
                from = (df.getDateFrom() == null ? 0 : df.getDateFrom().getTime());
                to = df.getDateTo().getTime();
            }
            long cdate = 0;
            for (int i = cl.size() - 1; i >= 0; i--) {
                c = cl.get(i);
                cdate = c.getDate().getTime();
                if (to > 0) {
                    if (cdate < from || cdate > to)
                        cl.remove(c);
                } else {
                    if (cdate < from)
                        cl.remove(c);
                }
            }
        }
        if (filter.getType().equals(FilterType.CALLER)) {
            ICaller cfilter = (ICaller) filter.getFilterObject();
            IPhonenumber pn = cfilter.getPhoneNumber();
            for (int i = cl.size() - 1; i >= 0; i--) {
                c = cl.get(i);
                if (!c.getCaller().getPhoneNumber().equals(pn))
                    cl.remove(c);
            }
        }
        if (filter.getType().equals(FilterType.PHONENUMBER)) {
            IPhonenumber pn = (IPhonenumber) filter.getFilterObject();
            for (int i = cl.size() - 1; i >= 0; i--) {
                c = cl.get(i);
                if (!c.getCaller().getPhoneNumber().equals(pn))
                    cl.remove(c);
            }
        }
        if (filter.getType().equals(FilterType.CIP)) {
            ICip cip = (ICip) filter.getFilterObject();
            for (int i = cl.size() - 1; i >= 0; i--) {
                c = cl.get(i);
                if (!c.getCIP().equals(cip))
                    cl.remove(c);
            }
        }
        if (filter.getType().equals(FilterType.MSN)) {
            IMsn msn = (IMsn) filter.getFilterObject();
            for (int i = cl.size() - 1; i >= 0; i--) {
                c = cl.get(i);
                if (!c.getMSN().equals(msn))
                    cl.remove(c);
            }
        }
        if (filter.getType().equals(FilterType.UUID)) {
            String[] uuids = (String[]) filter.getFilterObject();
            for (int i = cl.size() - 1; i >= 0; i--) {
                c = cl.get(i);
                boolean hasUUID = false;
                for (int j = 0; j < uuids.length; j++) {
                    if (c.getUUID().equalsIgnoreCase(uuids[j]))
                        hasUUID = true;
                }
                if (!hasUUID)
                    cl.remove(c);
            }
        }
        if (filter.getType().equals(FilterType.ATTRIBUTE)) {
            IAttributeMap m = ((AttributeFilter) filter).getAttributeMap();
            if (m != null && m.size() > 0) {
                Iterator iter = m.iterator();
                IAttribute a = null;
                while (iter.hasNext()) {
                    a = (IAttribute) iter.next();
                    IAttribute ua = null;
                    for (int i = cl.size() - 1; i >= 0; i--) {
                        c = cl.get(i);
                        ua = c.getAttribute(a.getName());
                        if (ua == null || !ua.getValue().equalsIgnoreCase(a.getValue())) {
                            cl.remove(c);
                        }
                    }
                }
            }
        }
        if (filter.getType().equals(FilterType.ITEMCOUNT)) {
            int itemcount = ((ItemCountFilter) filter).getLimit();
            if (itemcount > 0) {
                ICallList tmpCl = this.getRuntime().getCallFactory().createCallList(itemcount);
                // added: 2006/04/20: just a work-a-round
                cl.sort(0, false);
                for (int i = 0, j = Math.min(cl.size(), itemcount); i < j; i++) {
                    tmpCl.add(cl.get(i));
                }
                cl.clear();
                cl.add(tmpCl);
            }
        }
    }
    this.m_logger.info("CallList size after filtering: " + cl.size());
    this.m_logger.info("Finished filtering with filter <" + filter + "> in " + Long.toString(System.currentTimeMillis() - start) + " msec.");
    return cl;
}
Also used : ICall(de.janrufmonitor.framework.ICall) ICip(de.janrufmonitor.framework.ICip) ICaller(de.janrufmonitor.framework.ICaller) ItemCountFilter(de.janrufmonitor.repository.filter.ItemCountFilter) ICallList(de.janrufmonitor.framework.ICallList) AttributeFilter(de.janrufmonitor.repository.filter.AttributeFilter) Iterator(java.util.Iterator) IAttribute(de.janrufmonitor.framework.IAttribute) IAttributeMap(de.janrufmonitor.framework.IAttributeMap) MonthYearFilter(de.janrufmonitor.repository.filter.MonthYearFilter) YearFilter(de.janrufmonitor.repository.filter.YearFilter) DateFilter(de.janrufmonitor.repository.filter.DateFilter) IMsn(de.janrufmonitor.framework.IMsn) MonthYearFilter(de.janrufmonitor.repository.filter.MonthYearFilter) IPhonenumber(de.janrufmonitor.framework.IPhonenumber)

Aggregations

ICip (de.janrufmonitor.framework.ICip)20 IMsn (de.janrufmonitor.framework.IMsn)17 ICaller (de.janrufmonitor.framework.ICaller)14 IPhonenumber (de.janrufmonitor.framework.IPhonenumber)13 Date (java.util.Date)13 ICall (de.janrufmonitor.framework.ICall)10 IAttributeMap (de.janrufmonitor.framework.IAttributeMap)8 IAttribute (de.janrufmonitor.framework.IAttribute)6 IName (de.janrufmonitor.framework.IName)6 IRuntime (de.janrufmonitor.runtime.IRuntime)4 ICallList (de.janrufmonitor.framework.ICallList)3 IEventBroker (de.janrufmonitor.framework.event.IEventBroker)3 AttributeFilter (de.janrufmonitor.repository.filter.AttributeFilter)3 DateFilter (de.janrufmonitor.repository.filter.DateFilter)3 ItemCountFilter (de.janrufmonitor.repository.filter.ItemCountFilter)3 ParseException (java.text.ParseException)3 SimpleDateFormat (java.text.SimpleDateFormat)3 ArrayList (java.util.ArrayList)3 List (java.util.List)3 IEvent (de.janrufmonitor.framework.event.IEvent)2