Search in sources :

Example 21 with EventInstance

use of com.serotonin.m2m2.rt.event.EventInstance in project ma-modules-public by infiniteautomation.

the class ReportChartCreator method createContent.

/**
 * Uses the given parameters to create the data for the fields of this class. Once the content has been created the
 * getters for the fields can be used to retrieve.
 *
 * @param host - Mango's hostname
 * @param port - Mango's port
 * @param reportInstance
 * @param reportDao
 * @param inlinePrefix
 *            if this is non-null, it implies that the content should be inline.
 * @param createExportFile
 */
public void createContent(String host, int port, ReportInstance reportInstance, ReportDao reportDao, String inlinePrefix, boolean createExportFile) {
    this.inlinePrefix = inlinePrefix;
    reportInstance.setTranslations(translations);
    // Use a stream handler to get the report data from the database.
    StreamHandler handler = new StreamHandler(host, port, reportInstance.getXidMap(), reportInstance.getReportStartTime(), reportInstance.getReportEndTime(), IMAGE_WIDTH, createExportFile, translations);
    // Process the report content with the handler.
    if (Common.databaseProxy.getNoSQLProxy() == null)
        reportDao.reportInstanceDataSQL(reportInstance.getId(), handler);
    else
        reportDao.reportInstanceDataNoSQL(reportInstance.getId(), handler);
    pointStatistics = handler.getPointStatistics();
    devices = handler.getDevices();
    pointMap = handler.getStatisticsMap();
    UsedImagesDirective inlineImages = new UsedImagesDirective();
    SubjectDirective subjectDirective = new SubjectDirective(translations);
    // Prepare the model for the content rendering.
    Map<String, Object> model = new HashMap<String, Object>();
    model.put("fmt", new MessageFormatDirective(translations));
    model.put("subject", subjectDirective);
    model.put("img", inlineImages);
    model.put("instance", reportInstance);
    model.put("timezone", timeZone.getID());
    model.put("points", pointStatistics);
    model.put("inline", inlinePrefix == null ? "" : "cid:");
    model.put("devices", devices);
    model.put("mapped", pointMap);
    model.put("ALPHANUMERIC", DataTypes.ALPHANUMERIC);
    model.put("BINARY", DataTypes.BINARY);
    model.put("MULTISTATE", DataTypes.MULTISTATE);
    model.put("NUMERIC", DataTypes.NUMERIC);
    model.put("IMAGE", DataTypes.IMAGE);
    // Create the individual point charts
    for (PointStatistics pointStat : pointStatistics) {
        PointTimeSeriesCollection ptsc = new PointTimeSeriesCollection(timeZone);
        if (pointStat.getNumericTimeSeries() != null)
            ptsc.addNumericTimeSeries(pointStat.getNumericTimeSeries());
        else if (pointStat.getDiscreteTimeSeries() != null)
            ptsc.addDiscreteTimeSeries(pointStat.getDiscreteTimeSeries());
        if (ptsc.hasData()) {
            if (inlinePrefix != null)
                model.put("chartName", inlinePrefix + pointStat.getChartName());
            pointStat.setImageData(ImageChartUtils.getChartData(ptsc, POINT_IMAGE_WIDTH, POINT_IMAGE_HEIGHT, reportInstance.getReportStartTime(), reportInstance.getReportEndTime()));
        }
        // in the report I'll add it here while we are already iterating over the points that are included in the report
        if (pointStat.getDataType() == DataTypes.IMAGE) {
            ValueChangeCounter pointStatisticsGenerator = (ValueChangeCounter) pointStat.getStats();
            ImageValue img = (ImageValue) (pointStatisticsGenerator.getLastValue());
            if (img != null) {
                try {
                    pointStat.setImageData(img.getImageData());
                    if (inlinePrefix != null)
                        model.put("chartName", inlinePrefix + pointStat.getChartName());
                    else {
                        // serve up the image using the reportImageChart servlet instead of the imageValueServlet that is used on flipbook page
                        // The path comes from the servlet path definition in web.xml.
                        model.put("chartName", IMAGE_SERVLET + pointStat.getChartName());
                    }
                } catch (IOException e) {
                    LOG.error("failed to retrieve image data", e);
                }
            }
        }
    }
    // consolidated chart
    PointTimeSeriesCollection ptsc = handler.getPointTimeSeriesCollection();
    if (ptsc.hasData()) {
        if (inlinePrefix != null)
            model.put("chartName", inlinePrefix + IMAGE_CONTENT_ID);
        else {
            chartName = "r" + reportInstance.getId() + ".png";
            // The path comes from the servlet path definition in web.xml.
            model.put("chartName", IMAGE_SERVLET + chartName);
        }
        imageData = ImageChartUtils.getChartData(ptsc, true, IMAGE_WIDTH, IMAGE_HEIGHT, reportInstance.getReportStartTime(), reportInstance.getReportEndTime());
    }
    List<EventInstance> events = null;
    if (reportInstance.getIncludeEvents() != ReportVO.EVENTS_NONE) {
        events = reportDao.getReportInstanceEvents(reportInstance.getId());
        model.put("includeEvents", true);
        model.put("events", events);
    } else
        model.put("includeEvents", false);
    List<ReportUserComment> comments = null;
    if (reportInstance.isIncludeUserComments()) {
        comments = reportDao.getReportInstanceUserComments(reportInstance.getId());
        // Only provide the list of point comments to the report. The event comments have already be correlated
        // into the events list.
        List<ReportUserComment> pointComments = new ArrayList<ReportUserComment>();
        for (ReportUserComment c : comments) {
            if (c.getCommentType() == UserCommentVO.TYPE_POINT)
                pointComments.add(c);
        }
        model.put("includeUserComments", true);
        model.put("userComments", pointComments);
    } else
        model.put("includeUserComments", false);
    // Create the template.
    Template ftl;
    StringWriter writer = new StringWriter();
    FileReader reader = null;
    try {
        File templateFile = ReportCommon.instance.getTemplateFile(reportInstance.getTemplateFile());
        reader = new FileReader(templateFile);
        ftl = new Template(reportInstance.getName(), reader, Common.freemarkerConfiguration);
        ftl.process(model, writer);
    } catch (FileNotFoundException e) {
        LOG.error("Unable to find report template file: " + reportInstance.getName());
    } catch (IOException e) {
        // Couldn't load the template?
        throw new ShouldNeverHappenException(e);
    } catch (Exception e) {
        // Error processing the FTL?
        throw new ShouldNeverHappenException(e);
    } finally {
        if (reader != null)
            try {
                reader.close();
            } catch (IOException e) {
                LOG.error("Error closing template file reader: " + e.getMessage(), e);
            }
    }
    // Save the content
    html = writer.toString();
    subject = subjectDirective.getSubject();
    inlineImageList = inlineImages.getImageList();
    // Save the export file (if any)
    exportFile = handler.exportFile;
    if (createExportFile && events != null) {
        try {
            eventFile = File.createTempFile("tempEventCSV", ".csv");
            new EventCsvStreamer(new PrintWriter(new FileWriter(eventFile)), events, translations);
        } catch (IOException e) {
            LOG.error("Failed to create temp event file", e);
        }
    }
    if (createExportFile && comments != null) {
        try {
            commentFile = File.createTempFile("tempCommentCSV", ".csv");
            new UserCommentCsvStreamer(new PrintWriter(new FileWriter(commentFile)), comments, translations);
        } catch (IOException e) {
            LOG.error("Failed to create temp comment file", e);
        }
    }
}
Also used : EventInstance(com.serotonin.m2m2.rt.event.EventInstance) EventCsvStreamer(com.serotonin.m2m2.vo.export.EventCsvStreamer) HashMap(java.util.HashMap) PointTimeSeriesCollection(com.serotonin.m2m2.util.chart.PointTimeSeriesCollection) FileWriter(java.io.FileWriter) ArrayList(java.util.ArrayList) FileNotFoundException(java.io.FileNotFoundException) Template(freemarker.template.Template) MessageFormatDirective(com.serotonin.m2m2.email.MessageFormatDirective) StringWriter(java.io.StringWriter) ExportDataStreamHandler(com.serotonin.m2m2.vo.export.ExportDataStreamHandler) ValueChangeCounter(com.serotonin.m2m2.view.stats.ValueChangeCounter) UsedImagesDirective(com.serotonin.m2m2.email.UsedImagesDirective) FileReader(java.io.FileReader) PrintWriter(java.io.PrintWriter) IOException(java.io.IOException) InvalidArgumentException(com.serotonin.InvalidArgumentException) FileNotFoundException(java.io.FileNotFoundException) ShouldNeverHappenException(com.serotonin.ShouldNeverHappenException) IOException(java.io.IOException) SubjectDirective(com.serotonin.m2m2.email.SubjectDirective) ShouldNeverHappenException(com.serotonin.ShouldNeverHappenException) ImageValue(com.serotonin.m2m2.rt.dataImage.types.ImageValue) File(java.io.File)

Example 22 with EventInstance

use of com.serotonin.m2m2.rt.event.EventInstance in project ma-core-public by infiniteautomation.

the class BaseDwr method doLongPoll.

@DwrPermission(anonymous = true)
public Map<String, Object> doLongPoll(int pollSessionId) {
    Map<String, Object> response = new HashMap<>();
    HttpServletRequest httpRequest = WebContextFactory.get().getHttpServletRequest();
    User user = Common.getUser(httpRequest);
    EventDao eventDao = EventDao.instance;
    LongPollData data = getLongPollData(pollSessionId, false);
    data.updateTimestamp();
    LongPollRequest pollRequest = data.getRequest();
    // One minute
    long expireTime = Common.timer.currentTimeMillis() + 60000;
    LongPollState state = data.getState();
    int waitTime = SystemSettingsDao.getIntValue(SystemSettingsDao.UI_PERFORMANCE);
    // For users that log in on multiple machines (or browsers), reset the
    // last alarm timestamp so that it always
    // gets reset with at least each new poll. For now this beats writing
    // user-specific event change tracking code.
    state.setLastAlarmLevelChange(0);
    while (!pollRequest.isTerminated() && Common.timer.currentTimeMillis() < expireTime) {
        if (Providers.get(IMangoLifecycle.class).isTerminated()) {
            pollRequest.setTerminated(true);
            break;
        }
        if (pollRequest.isMaxAlarm() && user != null) {
            // Track the last alarm count to see if we need to update the
            // alarm toaster
            Integer lastUnsilencedAlarmCount = (Integer) data.getState().getAttribute("lastUnsilencedAlarmCount");
            // Ensure we have one, as we won't on first run
            if (lastUnsilencedAlarmCount == null)
                lastUnsilencedAlarmCount = 0;
            // Sort into lists for the different types
            List<EventInstance> events = Common.eventManager.getAllActiveUserEvents(user.getId());
            int currentUnsilencedAlarmCount = events.size();
            int lifeSafetyTotal = 0;
            EventInstance lifeSafetyEvent = null;
            int criticalTotal = 0;
            EventInstance criticalEvent = null;
            int urgentTotal = 0;
            EventInstance urgentEvent = null;
            int warningTotal = 0;
            EventInstance warningEvent = null;
            int importantTotal = 0;
            EventInstance importantEvent = null;
            int informationTotal = 0;
            EventInstance informationEvent = null;
            int noneTotal = 0;
            EventInstance noneEvent = null;
            int doNotLogTotal = 0;
            EventInstance doNotLogEvent = null;
            for (EventInstance event : events) {
                switch(event.getAlarmLevel()) {
                    case AlarmLevels.LIFE_SAFETY:
                        lifeSafetyTotal++;
                        lifeSafetyEvent = event;
                        break;
                    case AlarmLevels.CRITICAL:
                        criticalTotal++;
                        criticalEvent = event;
                        break;
                    case AlarmLevels.URGENT:
                        urgentTotal++;
                        urgentEvent = event;
                        break;
                    case AlarmLevels.WARNING:
                        warningTotal++;
                        warningEvent = event;
                        break;
                    case AlarmLevels.IMPORTANT:
                        importantTotal++;
                        importantEvent = event;
                        break;
                    case AlarmLevels.INFORMATION:
                        informationTotal++;
                        informationEvent = event;
                        break;
                    case AlarmLevels.NONE:
                        noneTotal++;
                        noneEvent = event;
                        break;
                    case AlarmLevels.DO_NOT_LOG:
                        doNotLogTotal++;
                        doNotLogEvent = event;
                        break;
                }
            }
            // If we have some new information we should show it
            if (lastUnsilencedAlarmCount != currentUnsilencedAlarmCount) {
                data.getState().setAttribute("lastUnsilencedAlarmCount", // Update the value
                currentUnsilencedAlarmCount);
                // Indicate to UI that
                response.put("alarmsUpdated", true);
                // there is a new
                // alarm
                response.put("alarmsDoNotLog", doNotLogTotal);
                if (doNotLogTotal == 1)
                    response.put("doNotLogEvent", doNotLogEvent);
                response.put("alarmsNone", noneTotal);
                if (noneTotal == 1)
                    response.put("noneEvent", noneEvent);
                response.put("alarmsInformation", informationTotal);
                if (informationTotal == 1)
                    response.put("informationEvent", informationEvent);
                response.put("alarmsImportant", importantTotal);
                if (importantTotal == 1)
                    response.put("importantEvent", importantEvent);
                response.put("alarmsWarning", warningTotal);
                if (warningTotal == 1)
                    response.put("warningEvent", warningEvent);
                response.put("alarmsUrgent", urgentTotal);
                if (urgentTotal == 1)
                    response.put("urgentEvent", urgentEvent);
                response.put("alarmsCritical", criticalTotal);
                if (criticalTotal == 1)
                    response.put("criticalEvent", criticalEvent);
                response.put("alarmsLifeSafety", lifeSafetyTotal);
                if (lifeSafetyTotal == 1)
                    response.put("lifeSafetyEvent", lifeSafetyEvent);
            } else {
            // end if new alarm toaster info
            // response.put("alarmsUpdated",false);
            }
            // The events have changed. See if the user's particular max
            // alarm level has changed.
            int maxAlarmLevel = AlarmLevels.DO_NOT_LOG;
            if (lifeSafetyTotal > 0)
                maxAlarmLevel = AlarmLevels.LIFE_SAFETY;
            else if (criticalTotal > 0)
                maxAlarmLevel = AlarmLevels.CRITICAL;
            else if (urgentTotal > 0)
                maxAlarmLevel = AlarmLevels.URGENT;
            else if (warningTotal > 0)
                maxAlarmLevel = AlarmLevels.WARNING;
            else if (importantTotal > 0)
                maxAlarmLevel = AlarmLevels.IMPORTANT;
            else if (informationTotal > 0)
                maxAlarmLevel = AlarmLevels.INFORMATION;
            else if (noneTotal > 0)
                maxAlarmLevel = AlarmLevels.NONE;
            if (maxAlarmLevel != state.getMaxAlarmLevel()) {
                response.put("highestUnsilencedAlarmLevel", maxAlarmLevel);
                state.setMaxAlarmLevel(maxAlarmLevel);
            }
            // Check the max alarm. First check if the events have changed
            // since the last time this request checked.
            long lastEMUpdate = Common.eventManager.getLastAlarmTimestamp();
            // If there is a new alarm then do stuff
            if (state.getLastAlarmLevelChange() < lastEMUpdate) {
                state.setLastAlarmLevelChange(lastEMUpdate);
            } else {
            // end no new alarms
            // Don't add data for nothing, this will cause tons of
            // polls. response.put("alarmsUpdated",false);
            }
        }
        if (pollRequest.isPointDetails() && user != null) {
            PointDetailsState newState = DataPointDetailsDwr.getPointData();
            PointDetailsState responseState;
            PointDetailsState oldState = state.getPointDetailsState();
            if (oldState == null)
                responseState = newState;
            else {
                responseState = newState.clone();
                responseState.removeEqualValue(oldState);
            }
            if (!responseState.isEmpty()) {
                response.put("pointDetailsState", responseState);
                state.setPointDetailsState(newState);
            }
        }
        // TODO This code is used on the legacy alarms page
        if (pollRequest.isPendingAlarms() && user != null) {
            // Create the list of most current pending alarm content.
            Map<String, Object> model = new HashMap<>();
            model.put(MODEL_ATTR_EVENTS, eventDao.getPendingEvents(user.getId()));
            model.put("pendingEvents", true);
            model.put("noContentWhenEmpty", true);
            String currentContent = generateContent(httpRequest, "eventList.jsp", model);
            currentContent = com.serotonin.util.StringUtils.trimWhitespace(currentContent);
            if (!StringUtils.equals(currentContent, state.getPendingAlarmsContent())) {
                response.put("newAlarms", true);
                response.put("pendingAlarmsContent", currentContent);
                state.setPendingAlarmsContent(currentContent);
            } else {
                response.put("newAlarms", false);
            }
        }
        // Module handlers
        for (int i = 0; i < longPollHandlers.size(); i++) {
            LongPollHandler handler = longPollHandlers.get(i);
            handler.handleLongPoll(data, response, user);
        }
        if (!response.isEmpty())
            break;
        synchronized (pollRequest) {
            try {
                pollRequest.wait(waitTime);
            } catch (InterruptedException e) {
            // no op
            }
        }
    }
    if (pollRequest.isTerminated())
        response.put("terminated", true);
    return response;
}
Also used : EventInstance(com.serotonin.m2m2.rt.event.EventInstance) LongPollState(com.serotonin.m2m2.web.dwr.longPoll.LongPollState) User(com.serotonin.m2m2.vo.User) HashMap(java.util.HashMap) LongPollData(com.serotonin.m2m2.web.dwr.longPoll.LongPollData) LongPollHandler(com.serotonin.m2m2.web.dwr.longPoll.LongPollHandler) HttpServletRequest(javax.servlet.http.HttpServletRequest) EventDao(com.serotonin.m2m2.db.dao.EventDao) IMangoLifecycle(com.serotonin.m2m2.IMangoLifecycle) LongPollRequest(com.serotonin.m2m2.web.dwr.longPoll.LongPollRequest) PointDetailsState(com.serotonin.m2m2.web.dwr.beans.PointDetailsState) DwrPermission(com.serotonin.m2m2.web.dwr.util.DwrPermission)

Example 23 with EventInstance

use of com.serotonin.m2m2.rt.event.EventInstance in project ma-core-public by infiniteautomation.

the class DataSourceDwr method getAlarms.

/**
 * Get the current alarms for a datasource
 *
 * @param id
 * @return
 */
@DwrPermission(user = true)
public List<EventInstanceBean> getAlarms(int id) {
    DataSourceVO<?> ds = Common.runtimeManager.getDataSource(id);
    List<EventInstanceBean> beans = new ArrayList<>();
    if (ds != null) {
        List<EventInstance> events = EventDao.instance.getPendingEventsForDataSource(ds.getId(), Common.getUser().getId());
        if (events != null) {
            for (EventInstance event : events) beans.add(new EventInstanceBean(event.isActive(), event.getAlarmLevel(), Functions.getTime(event.getActiveTimestamp()), translate(event.getMessage())));
        }
    }
    return beans;
}
Also used : EventInstance(com.serotonin.m2m2.rt.event.EventInstance) EventInstanceBean(com.serotonin.m2m2.web.dwr.beans.EventInstanceBean) ArrayList(java.util.ArrayList) DwrPermission(com.serotonin.m2m2.web.dwr.util.DwrPermission)

Example 24 with EventInstance

use of com.serotonin.m2m2.rt.event.EventInstance in project ma-core-public by infiniteautomation.

the class DataSourceEditDwr method getAlarms.

@DwrPermission(user = true)
public List<EventInstanceBean> getAlarms() {
    DataSourceVO<?> ds = Common.getUser().getEditDataSource();
    List<EventInstance> events = EventDao.instance.getPendingEventsForDataSource(ds.getId(), Common.getUser().getId());
    List<EventInstanceBean> beans = new ArrayList<>();
    if (events != null) {
        for (EventInstance event : events) beans.add(new EventInstanceBean(event.isActive(), event.getAlarmLevel(), Functions.getTime(event.getActiveTimestamp()), translate(event.getMessage())));
    }
    return beans;
}
Also used : EventInstance(com.serotonin.m2m2.rt.event.EventInstance) EventInstanceBean(com.serotonin.m2m2.web.dwr.beans.EventInstanceBean) ArrayList(java.util.ArrayList) DwrPermission(com.serotonin.m2m2.web.dwr.util.DwrPermission)

Example 25 with EventInstance

use of com.serotonin.m2m2.rt.event.EventInstance in project ma-core-public by infiniteautomation.

the class EventsDwr method search.

@DwrPermission(user = true)
public ProcessResult search(int eventId, String eventType, String status, int alarmLevel, String keywordStr, int dateRangeType, int relativeDateType, int previousPeriodCount, int previousPeriodType, int pastPeriodCount, int pastPeriodType, boolean fromNone, int fromYear, int fromMonth, int fromDay, int fromHour, int fromMinute, int fromSecond, boolean toNone, int toYear, int toMonth, int toDay, int toHour, int toMinute, int toSecond, int page, Date date) {
    ProcessResult response = new ProcessResult();
    HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
    User user = Common.getUser(request);
    int from = PAGE_SIZE * page;
    int to = from + PAGE_SIZE;
    // excluding all of the events for that day. So, // we need to add 1 day to it.
    if (date != null)
        date = DateUtils.minus(new DateTime(date.getTime()), Common.TimePeriods.DAYS, -1).toDate();
    LongPair dateRange = getDateRange(dateRangeType, relativeDateType, previousPeriodCount, previousPeriodType, pastPeriodCount, pastPeriodType, fromNone, fromYear, fromMonth, fromDay, fromHour, fromMinute, fromSecond, toNone, toYear, toMonth, toDay, toHour, toMinute, toSecond, user.getDateTimeZoneInstance());
    EventDao eventDao = EventDao.instance;
    List<EventInstance> results = eventDao.search(eventId, eventType, status, alarmLevel, getKeywords(keywordStr), dateRange.getL1(), dateRange.getL2(), user.getId(), getTranslations(), from, to, date);
    Map<String, Object> model = new HashMap<String, Object>();
    int searchRowCount = eventDao.getSearchRowCount();
    int pages = (int) Math.ceil(((double) searchRowCount) / PAGE_SIZE);
    if (date != null) {
        int startRow = eventDao.getStartRow();
        if (startRow == -1)
            page = pages - 1;
        else
            page = eventDao.getStartRow() / PAGE_SIZE;
    }
    if (pages > 1) {
        model.put("displayPagination", true);
        if (page - PAGINATION_RADIUS > 1)
            model.put("leftEllipsis", true);
        else
            model.put("leftEllipsis", false);
        int linkFrom = page + 1 - PAGINATION_RADIUS;
        if (linkFrom < 2)
            linkFrom = 2;
        model.put("linkFrom", linkFrom);
        int linkTo = page + 1 + PAGINATION_RADIUS;
        if (linkTo >= pages)
            linkTo = pages - 1;
        model.put("linkTo", linkTo);
        if (page + PAGINATION_RADIUS < pages - 2)
            model.put("rightEllipsis", true);
        else
            model.put("rightEllipsis", false);
        model.put("numberOfPages", pages);
    } else
        model.put("displayPagination", false);
    model.put(MODEL_ATTR_EVENTS, results);
    model.put("page", page);
    model.put("pendingEvents", false);
    response.addData("content", generateContent(request, "eventList.jsp", model));
    response.addData("resultCount", new TranslatableMessage("events.search.resultCount", searchRowCount));
    return response;
}
Also used : EventInstance(com.serotonin.m2m2.rt.event.EventInstance) User(com.serotonin.m2m2.vo.User) LongPair(com.serotonin.m2m2.vo.pair.LongPair) HashMap(java.util.HashMap) ProcessResult(com.serotonin.m2m2.i18n.ProcessResult) DateTime(org.joda.time.DateTime) HttpServletRequest(javax.servlet.http.HttpServletRequest) EventDao(com.serotonin.m2m2.db.dao.EventDao) TranslatableMessage(com.serotonin.m2m2.i18n.TranslatableMessage) DwrPermission(com.serotonin.m2m2.web.dwr.util.DwrPermission)

Aggregations

EventInstance (com.serotonin.m2m2.rt.event.EventInstance)30 ArrayList (java.util.ArrayList)14 User (com.serotonin.m2m2.vo.User)12 DwrPermission (com.serotonin.m2m2.web.dwr.util.DwrPermission)7 HashMap (java.util.HashMap)7 TranslatableMessage (com.serotonin.m2m2.i18n.TranslatableMessage)6 EventDao (com.serotonin.m2m2.db.dao.EventDao)5 CopyOnWriteArrayList (java.util.concurrent.CopyOnWriteArrayList)5 UserEventListener (com.serotonin.m2m2.rt.event.UserEventListener)4 ShouldNeverHappenException (com.serotonin.ShouldNeverHappenException)3 ProcessResult (com.serotonin.m2m2.i18n.ProcessResult)3 Translations (com.serotonin.m2m2.i18n.Translations)3 DataPointRT (com.serotonin.m2m2.rt.dataImage.DataPointRT)3 IDataPointValueSource (com.serotonin.m2m2.rt.dataImage.IDataPointValueSource)3 PointValueTime (com.serotonin.m2m2.rt.dataImage.PointValueTime)3 ResultTypeException (com.serotonin.m2m2.rt.script.ResultTypeException)3 ScriptLog (com.serotonin.m2m2.rt.script.ScriptLog)3 ScriptPermissionsException (com.serotonin.m2m2.rt.script.ScriptPermissionsException)3 EventInstanceBean (com.serotonin.m2m2.web.dwr.beans.EventInstanceBean)3 ScriptException (javax.script.ScriptException)3