Package de.iritgo.aktera.journal

Source Code of de.iritgo.aktera.journal.JournalManagerImpl

/**
* This file is part of the Iritgo/Aktera Framework.
*
* Copyright (C) 2005-2011 Iritgo Technologies.
* Copyright (C) 2003-2005 BueroByte GbR.
*
* Iritgo licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package de.iritgo.aktera.journal;


import java.sql.*;
import java.util.*;
import com.ibm.icu.util.GregorianCalendar;
import lombok.Setter;
import de.iritgo.aktario.framework.command.CommandTools;
import de.iritgo.aktera.authentication.defaultauth.entity.UserDAO;
import de.iritgo.aktera.configuration.SystemConfigManager;
import de.iritgo.aktera.event.EventManager;
import de.iritgo.aktera.journal.entity.JournalEntry;
import de.iritgo.aktera.logger.Logger;
import de.iritgo.aktera.model.ModelRequest;
import de.iritgo.aktera.scheduler.*;
import de.iritgo.aktera.spring.SpringTools;
import de.iritgo.aktera.startup.*;
import de.iritgo.simplelife.bean.BeanTools;
import de.iritgo.simplelife.constants.SortOrder;
import de.iritgo.simplelife.string.StringTools;


public class JournalManagerImpl implements JournalManager, StartupHandler
{
  @Setter
  private JournalDAO journalDAO;

  @Setter
  private Logger logger;

  @Setter
  private Map<String, JournalExtender> journalExtenders;

  @Setter
  private List<JournalExecute> journalExecuters;

  @Setter
  private EventManager eventManager;

  @Setter
  private SystemConfigManager systemConfigManager;

  @Setter
  private Scheduler scheduler;

  @Override
  public void startup() throws StartupException
  {
    if (systemConfigManager.getBool("phone", "journalCleanupEnabled"))
    {
      Time cleanupTime = systemConfigManager.getTime("phone", "journalCleanupTime");
      int cleanupInterval = systemConfigManager.getInt("phone", "journalCleanupPeriod");
      logger.info("Starting Journal cleanup job (at " + cleanupTime + ", delete entries older than "
              + cleanupInterval + " seconds)");
      GregorianCalendar cleanupTimeCal = new GregorianCalendar();
      cleanupTimeCal.setTime(cleanupTime);
      Runnable cleanupTask = new Runnable()
      {
        @Override
        public void run()
        {
          journalCleanup();
        }
      };
      scheduler.scheduleRunnable(
              "de.iritgo.aktera.journal.JournalCleanup",
              "JournalManager",
              cleanupTask,
              new ScheduleOn().hour(cleanupTimeCal.get(Calendar.HOUR_OF_DAY))
                      .minute(cleanupTimeCal.get(Calendar.MINUTE)).second(0));
    }
  }

  @Override
  public void shutdown() throws ShutdownException
  {
  }

  @Override
  public void addJournalEntry(JournalEntry journalEntry)
  {
    if (journalEntry.getExtendedInfoType() != null)
    {
      JournalExtender je = journalExtenders.get(journalEntry.getExtendedInfoType());

      if (je != null)
      {
        je.newJournalEntry(journalEntry);
      }
    }

    journalDAO.create(journalEntry);

    Properties eventProps = new Properties();

    eventProps.put("journalEntry", journalEntry);
    eventManager.fire("iritgo.aktera.journal.new-entry", eventProps);

    refreshAktarioJournalList(journalEntry);
  }

  @Override
  public void deleteJournalEntry(JournalEntry journalEntry)
  {
    if (journalEntry == null)
    {
      logger.error("Can't delete journal entry. The journal entry object is null.");
      Thread.dumpStack();

      return;
    }

    if (journalEntry.getExtendedInfoType() != null)
    {
      JournalExtender je = journalExtenders.get(journalEntry.getExtendedInfoType());

      if (je != null)
      {
        je.deletedJournalEntry(journalEntry);
      }
    }

    journalDAO.delete(journalEntry);

    Properties eventProps = new Properties();

    eventProps.put("journalEntry", journalEntry);
    eventManager.fire("iritgo.aktera.journal.removed-entry", eventProps);

    refreshAktarioJournalList(journalEntry);
  }

  private void refreshAktarioJournalList(JournalEntry journalEntry)
  {
    UserDAO userDAO = (UserDAO) SpringTools.getBean(UserDAO.ID);
    de.iritgo.aktera.authentication.defaultauth.entity.AkteraUser userAktera = userDAO.findUserById(journalEntry
            .getOwnerId());

    Properties props = new Properties();

    props.setProperty("akteraUserName", userAktera.getName());
    CommandTools.performAsync("de.iritgo.aktera.journal.RefreshJournal", props);
  }

  @Override
  public Map<String, Object> getJournalEntryById(Integer id)
  {
    Map<String, Object> entry = new HashMap<String, Object>();

    JournalEntry journalEntry = journalDAO.getById(id);

    addJournalEntryAttributes(journalEntry, entry);

    if (journalEntry.getExtendedInfoType() != null)
    {
      JournalExtender je = journalExtenders.get(journalEntry.getExtendedInfoType());

      if (je != null)
      {
        je.addJournalEntryAttributes(entry);
      }
    }

    return entry;
  }

  @Override
  public List<Map<String, Object>> listJournalEntries(String search, Timestamp start, Timestamp end, Integer ownerId,
          String ownerType, String sortColumnName, SortOrder sortOrder, int firstResult, int resultsPerPage)
  {
    List<Map<String, Object>> entries = new LinkedList<Map<String, Object>>();

    for (JournalEntry journalEntry : journalDAO.listJournalEntries(search, start, end, ownerId, ownerType,
            sortColumnName, sortOrder, firstResult, resultsPerPage))
    {
      Map<String, Object> entry = new HashMap<String, Object>();

      addJournalEntryAttributes(journalEntry, entry);

      if (journalEntry.getExtendedInfoType() != null)
      {
        JournalExtender je = journalExtenders.get(journalEntry.getExtendedInfoType());

        if (je != null)
        {
          je.addJournalEntryAttributes(entry);
        }
      }

      entries.add(entry);
    }

    return entries;
  }

  @Override
  public long countJournalEntries(String search, Timestamp start, Timestamp end, Integer ownerId, String ownerType)
  {
    return journalDAO.countJournalEntries(search, start, end, ownerId, ownerType);
  }

  @Override
  public List<Map<String, Object>> listJournalEntriesByPrimaryAndSecondaryType(String search, Timestamp start,
          Timestamp end, Integer ownerId, String ownerType, String sortColumnName, SortOrder sortOrder,
          int firstResult, int resultsPerPage, String primaryType, String secondaryType)
  {
    List<Map<String, Object>> entries = new LinkedList<Map<String, Object>>();

    for (JournalEntry journalEntry : journalDAO.listJournalEntriesByPrimaryAndSecondaryType(search, start, end,
            ownerId, ownerType, sortColumnName, sortOrder, firstResult, resultsPerPage, primaryType,
            secondaryType))
    {
      Map<String, Object> entry = new HashMap<String, Object>();

      addJournalEntryAttributes(journalEntry, entry);

      if (journalEntry.getExtendedInfoType() != null)
      {
        JournalExtender je = journalExtenders.get(journalEntry.getExtendedInfoType());

        if (je != null)
        {
          je.addJournalEntryAttributes(entry);
        }
      }

      entries.add(entry);
    }

    return entries;
  }

  @Override
  public long countJournalEntriesByPrimaryAndSecondaryType(String search, Timestamp start, Timestamp end,
          Integer ownerId, String ownerType, String primaryType, String secondaryType)
  {
    return journalDAO.countJournalEntriesByPrimaryAndSecondaryType(search, start, end, ownerId, ownerType,
            primaryType, secondaryType);
  }

  private void addJournalEntryAttributes(JournalEntry journalEntry, Map<String, Object> entry)
  {
    BeanTools.copyBean2Map(journalEntry, entry, true);
  }

  @Override
  public void deleteJournalEntry(int journalEntryId)
  {
    JournalEntry journalEntry = journalDAO.getById(journalEntryId);

    deleteJournalEntry(journalEntry);
  }

  @Override
  public long countJournalEntriesByCondition(String condition, Map<String, Object> conditionMap)
  {
    return journalDAO.countJournalEntriesByCondition(condition, conditionMap);
  }

  @Override
  public List<Map<String, Object>> listJournalEntriesByCondition(String sortColumnName, SortOrder sortOrder,
          int firstResult, int resultsPerPage, String condition, Map<String, Object> conditionMap)
  {
    List<Map<String, Object>> entries = new LinkedList<Map<String, Object>>();

    for (JournalEntry journalEntry : journalDAO.listJournalEntriesByCondition(sortColumnName, sortOrder,
            firstResult, resultsPerPage, condition, conditionMap))
    {
      Map<String, Object> entry = new HashMap<String, Object>();

      addJournalEntryAttributes(journalEntry, entry);

      if (journalEntry.getExtendedInfoType() != null)
      {
        JournalExtender je = journalExtenders.get(journalEntry.getExtendedInfoType());

        if (je != null)
        {
          je.addJournalEntryAttributes(entry);
        }
      }

      entries.add(entry);
    }

    return entries;
  }

  @Override
  public void executeJournalEntry(String commandId, int id, String prefix, ModelRequest req)
  {
    Map<String, Object> entry = getJournalEntryById(id);
    String primaryType = (String) entry.get("primaryType");
    String secondaryType = (String) entry.get("secondaryType");

    for (JournalExecute execute : journalExecuters)
    {
      execute.execute(commandId, primaryType, secondaryType, prefix, entry, req);
    }
  }

  @Override
  public void deleteJournalAllEntries(Integer ownerId)
  {
    List<JournalEntry> journalEntries = journalDAO.listJournalEntriesByOwnerId(ownerId);

    for (JournalExtender extender : journalExtenders.values())
    {
      extender.deleteAllJournalEntries(journalEntries);
    }

    Properties eventProps = new Properties();
    eventProps.setProperty("ownerId", StringTools.trim(ownerId));

    eventManager.fire("iritgo.aktera.journal.remove-all-entries", eventProps);

    journalDAO.deleteAllJournalEntriesByOwnerId(ownerId);

    UserDAO userDAO = (UserDAO) SpringTools.getBean(UserDAO.ID);
    de.iritgo.aktera.authentication.defaultauth.entity.AkteraUser userAktera = userDAO.findUserById(ownerId);

    Properties props = new Properties();
    props.setProperty("akteraUserName", userAktera.getName());
    CommandTools.performAsync("de.iritgo.aktera.journal.RefreshJournal", props);
  }

  @Override
  public void deleteAllJournalEntriesBefore(long periodInSeconds)
  {
    for (JournalExtender extender : journalExtenders.values())
    {
      extender.deleteAllJournalEntriesBefore(periodInSeconds);
    }

    journalDAO.deleteAllJournalDatasBefore(periodInSeconds);
    journalDAO.deleteAllJournalEntriesBefore(periodInSeconds);
  }

  @Override
  public void journalCleanup()
  {
    int cleanupInterval = systemConfigManager.getInt("phone", "journalCleanupPeriod");
    if (cleanupInterval > 0)
    {
      logger.info("Cleaning CDR data older than " + cleanupInterval + " seconds)");
      deleteAllJournalEntriesBefore(cleanupInterval);
    }
  }
}
TOP

Related Classes of de.iritgo.aktera.journal.JournalManagerImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.