420 lines
17 KiB
Java
420 lines
17 KiB
Java
/*
|
|
* Decompiled with CFR 0.152.
|
|
*
|
|
* Could not load the following classes:
|
|
* javax.baja.collection.BICollection
|
|
* javax.baja.data.BIDataValue
|
|
* javax.baja.log.Log
|
|
* javax.baja.naming.BOrd
|
|
* javax.baja.naming.BOrdList
|
|
* javax.baja.naming.SlotPath
|
|
* javax.baja.nre.util.Array
|
|
* javax.baja.security.BIProtected
|
|
* javax.baja.security.BPermissions
|
|
* javax.baja.security.PermissionException
|
|
* javax.baja.sys.Action
|
|
* javax.baja.sys.BAbsTime
|
|
* javax.baja.sys.BComplex
|
|
* javax.baja.sys.BComponent
|
|
* javax.baja.sys.BFacets
|
|
* javax.baja.sys.BRelTime
|
|
* javax.baja.sys.BString
|
|
* javax.baja.sys.BValue
|
|
* javax.baja.sys.BasicContext
|
|
* javax.baja.sys.Clock
|
|
* javax.baja.sys.Clock$Ticket
|
|
* javax.baja.sys.Context
|
|
* javax.baja.sys.Cursor
|
|
* javax.baja.sys.Property
|
|
* javax.baja.sys.Slot
|
|
* javax.baja.sys.Sys
|
|
* javax.baja.sys.Type
|
|
* javax.baja.user.BUser
|
|
* javax.baja.util.BUuid
|
|
*/
|
|
package com.tridium.alarm.model;
|
|
|
|
import com.tridium.alarm.BConsoleRecipient;
|
|
import com.tridium.alarm.model.BAlarmConsoleRow;
|
|
import javax.baja.alarm.BAckState;
|
|
import javax.baja.alarm.BAlarmClass;
|
|
import javax.baja.alarm.BAlarmDatabase;
|
|
import javax.baja.alarm.BAlarmRecipient;
|
|
import javax.baja.alarm.BAlarmRecord;
|
|
import javax.baja.alarm.BAlarmService;
|
|
import javax.baja.alarm.BSourceState;
|
|
import javax.baja.collection.BICollection;
|
|
import javax.baja.data.BIDataValue;
|
|
import javax.baja.log.Log;
|
|
import javax.baja.naming.BOrd;
|
|
import javax.baja.naming.BOrdList;
|
|
import javax.baja.naming.SlotPath;
|
|
import javax.baja.nre.util.Array;
|
|
import javax.baja.security.BIProtected;
|
|
import javax.baja.security.BPermissions;
|
|
import javax.baja.security.PermissionException;
|
|
import javax.baja.sys.Action;
|
|
import javax.baja.sys.BAbsTime;
|
|
import javax.baja.sys.BComplex;
|
|
import javax.baja.sys.BComponent;
|
|
import javax.baja.sys.BFacets;
|
|
import javax.baja.sys.BRelTime;
|
|
import javax.baja.sys.BString;
|
|
import javax.baja.sys.BValue;
|
|
import javax.baja.sys.BasicContext;
|
|
import javax.baja.sys.Clock;
|
|
import javax.baja.sys.Context;
|
|
import javax.baja.sys.Cursor;
|
|
import javax.baja.sys.Property;
|
|
import javax.baja.sys.Slot;
|
|
import javax.baja.sys.Sys;
|
|
import javax.baja.sys.Type;
|
|
import javax.baja.user.BUser;
|
|
import javax.baja.util.BUuid;
|
|
|
|
/*
|
|
* Illegal identifiers - consider using --renameillegalidents true
|
|
*/
|
|
public final class BAlarmConsoleModel
|
|
extends BComponent {
|
|
public static final Action routeAlarm = BAlarmConsoleModel.newAction((int)260, (BValue)new BAlarmRecord(), null);
|
|
public static final Action ackAlarms = BAlarmConsoleModel.newAction((int)260, (BValue)new BComponent(), null);
|
|
public static final Action forceClear = BAlarmConsoleModel.newAction((int)260, (BValue)new BComponent(), null);
|
|
public static final Action refresh = BAlarmConsoleModel.newAction((int)260, null);
|
|
public static final Action addNotes = BAlarmConsoleModel.newAction((int)260, (BValue)new BComponent(), null);
|
|
public static final Action expire = BAlarmConsoleModel.newAction((int)260, null);
|
|
public static final Type TYPE;
|
|
private static final BRelTime expiryTime;
|
|
private static final Log log;
|
|
private volatile Context routeAlarmCx;
|
|
private final Object alarmMon;
|
|
private volatile boolean started;
|
|
private volatile Clock.Ticket expireTicket;
|
|
static /* synthetic */ Class class$com$tridium$alarm$model$BAlarmConsoleModel;
|
|
static /* synthetic */ Class class$com$tridium$alarm$model$BAlarmConsoleRow;
|
|
static /* synthetic */ Class class$javax$baja$alarm$BAlarmRecord;
|
|
|
|
public final void routeAlarm(BAlarmRecord bAlarmRecord) {
|
|
this.invoke(routeAlarm, (BValue)bAlarmRecord, null);
|
|
}
|
|
|
|
public final void ackAlarms(BComponent bComponent) {
|
|
this.invoke(ackAlarms, (BValue)bComponent, null);
|
|
}
|
|
|
|
public final void forceClear(BComponent bComponent) {
|
|
this.invoke(forceClear, (BValue)bComponent, null);
|
|
}
|
|
|
|
public final void refresh() {
|
|
this.invoke(refresh, null, null);
|
|
}
|
|
|
|
public final void addNotes(BComponent bComponent) {
|
|
this.invoke(addNotes, (BValue)bComponent, null);
|
|
}
|
|
|
|
public final void expire() {
|
|
this.invoke(expire, null, null);
|
|
}
|
|
|
|
public final Type getType() {
|
|
return TYPE;
|
|
}
|
|
|
|
public final void started() {
|
|
this.linkTo(this.getConsole(), (Slot)BAlarmRecipient.routeAlarm, (Slot)routeAlarm);
|
|
this.expireTicket = Clock.schedule((BComponent)this, (BRelTime)expiryTime, (Action)expire, null);
|
|
}
|
|
|
|
public final void stopped() throws Exception {
|
|
this.expireTicket.cancel();
|
|
}
|
|
|
|
public final void subscribed() {
|
|
this.expireTicket.cancel();
|
|
}
|
|
|
|
public final void unsubscribed() {
|
|
if (this.isRunning()) {
|
|
this.expireTicket = Clock.schedule((BComponent)this, (BRelTime)expiryTime, (Action)expire, null);
|
|
}
|
|
}
|
|
|
|
public final boolean isParentLegal(BComponent bComponent) {
|
|
return bComponent instanceof BConsoleRecipient;
|
|
}
|
|
|
|
/*
|
|
* WARNING - Removed try catching itself - possible behaviour change.
|
|
* Unable to fully structure code
|
|
* Enabled aggressive block sorting
|
|
* Enabled unnecessary exception pruning
|
|
* Enabled aggressive exception aggregation
|
|
*/
|
|
public final void doRefresh(Context var1_1) {
|
|
if (this.routeAlarmCx == null) {
|
|
this.routeAlarmCx = new BasicContext(var1_1.getUser(), var1_1.getLanguage());
|
|
}
|
|
this.started = true;
|
|
var2_2 = this.alarmMon;
|
|
synchronized (var2_2) {
|
|
if (BAlarmConsoleModel.log.isTraceOn()) {
|
|
BAlarmConsoleModel.log.trace("Refreshing alarm console");
|
|
}
|
|
if ((v0 = BAlarmConsoleModel.class$com$tridium$alarm$model$BAlarmConsoleRow) == null) {
|
|
v0 = BAlarmConsoleModel.class$com$tridium$alarm$model$BAlarmConsoleRow = BAlarmConsoleModel.class("[Lcom.tridium.alarm.model.BAlarmConsoleRow;", false);
|
|
}
|
|
var4_3 = (BAlarmConsoleRow[])this.getChildren(v0);
|
|
var5_4 = 0;
|
|
while (true) {
|
|
block8: {
|
|
if (var5_4 < var4_3.length) break block8;
|
|
var5_5 = this.getConsole().getOpenAlarms(var1_1);
|
|
if (true) ** GOTO lbl27
|
|
}
|
|
this.remove((BComplex)var4_3[var5_4]);
|
|
++var5_4;
|
|
}
|
|
do {
|
|
if ((var6_6 = (BAlarmRecord)var5_5.get()).getSourceState() == BSourceState.normal && (var6_6.isAcknowledged() || !var6_6.getAckRequired())) continue;
|
|
this.doRouteAlarm(var6_6, var1_1);
|
|
lbl27:
|
|
// 3 sources
|
|
|
|
} while (var5_5.next());
|
|
return;
|
|
}
|
|
}
|
|
|
|
/*
|
|
* WARNING - Removed try catching itself - possible behaviour change.
|
|
* Enabled aggressive block sorting
|
|
* Enabled unnecessary exception pruning
|
|
* Enabled aggressive exception aggregation
|
|
*/
|
|
public final void doRouteAlarm(BAlarmRecord bAlarmRecord, Context context) {
|
|
if (!this.started) {
|
|
return;
|
|
}
|
|
if (!this.getConsole().accept(bAlarmRecord)) {
|
|
return;
|
|
}
|
|
BAlarmService bAlarmService = (BAlarmService)Sys.getService((Type)BAlarmService.TYPE);
|
|
if (!this.hasPermissions(bAlarmService, bAlarmRecord, BPermissions.operatorRead, this.routeAlarmCx)) {
|
|
return;
|
|
}
|
|
Object object = this.alarmMon;
|
|
synchronized (object) {
|
|
block11: {
|
|
BAlarmConsoleRow bAlarmConsoleRow;
|
|
String string;
|
|
block10: {
|
|
string = SlotPath.escape((String)bAlarmRecord.getSource().toString());
|
|
bAlarmConsoleRow = (BAlarmConsoleRow)this.get(string);
|
|
if (bAlarmConsoleRow == null) {
|
|
bAlarmConsoleRow = new BAlarmConsoleRow(this.routeAlarmCx);
|
|
}
|
|
bAlarmConsoleRow.update(bAlarmRecord);
|
|
if (!bAlarmConsoleRow.isEmpty()) break block10;
|
|
if (bAlarmConsoleRow.getParent() != null) {
|
|
this.remove((BComplex)bAlarmConsoleRow);
|
|
}
|
|
break block11;
|
|
}
|
|
int n = 258;
|
|
if (!this.hasPermissions(bAlarmService, bAlarmRecord, BPermissions.operatorWrite, this.routeAlarmCx)) {
|
|
n |= 1;
|
|
}
|
|
if (bAlarmConsoleRow.getParent() == null) {
|
|
this.add(string, (BValue)bAlarmConsoleRow, n);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
|
|
private final BAlarmRecord[] getAlarmRecords(BAlarmService bAlarmService, BComponent bComponent) throws Exception {
|
|
BComponent bComponent2 = (BComponent)bComponent.get("alarmSources");
|
|
Class clazz = class$javax$baja$alarm$BAlarmRecord;
|
|
if (clazz == null) {
|
|
clazz = class$javax$baja$alarm$BAlarmRecord = BAlarmConsoleModel.class("[Ljavax.baja.alarm.BAlarmRecord;", false);
|
|
}
|
|
Array array = new Array(clazz);
|
|
if (bComponent2 != null) {
|
|
Property[] propertyArray = bComponent2.getDynamicPropertiesArray();
|
|
int n = 0;
|
|
while (n < propertyArray.length) {
|
|
BValue bValue = bComponent2.get(propertyArray[n]);
|
|
if (bValue instanceof BOrdList) {
|
|
BOrdList bOrdList = (BOrdList)bValue;
|
|
BOrd bOrd = BOrd.make((String)("alarm:|bql:select * from openAlarms where source = OrdList '" + SlotPath.escape((String)bOrdList.encodeToString()) + '\''));
|
|
BICollection bICollection = (BICollection)bOrd.get();
|
|
Cursor cursor = bICollection.cursor();
|
|
while (cursor.next()) {
|
|
array.add((Object)cursor.get().asValue().newCopy(true));
|
|
}
|
|
}
|
|
++n;
|
|
}
|
|
} else {
|
|
BComponent bComponent3 = (BComponent)bComponent.get("alarms");
|
|
Property[] propertyArray = bComponent3.getDynamicPropertiesArray();
|
|
int n = 0;
|
|
while (n < propertyArray.length) {
|
|
BAlarmRecord bAlarmRecord = bAlarmService.getAlarmDb().getRecord((BUuid)bComponent3.get(propertyArray[n]));
|
|
if (bAlarmRecord != null) {
|
|
array.add((Object)bAlarmRecord.newCopy(true));
|
|
}
|
|
++n;
|
|
}
|
|
}
|
|
return (BAlarmRecord[])array.trim();
|
|
}
|
|
|
|
public final void doAckAlarms(BComponent bComponent, Context context) throws Exception {
|
|
if (log.isTraceOn()) {
|
|
log.trace("Acknowledging alarms");
|
|
}
|
|
BAlarmService bAlarmService = (BAlarmService)Sys.getService((Type)BAlarmService.TYPE);
|
|
BAlarmDatabase bAlarmDatabase = bAlarmService.getAlarmDb();
|
|
BAlarmRecord[] bAlarmRecordArray = this.getAlarmRecords(bAlarmService, bComponent);
|
|
int n = 0;
|
|
while (n < bAlarmRecordArray.length) {
|
|
if (this.hasPermissions(bAlarmService, bAlarmRecordArray[n], BPermissions.operatorWrite, context)) {
|
|
boolean bl = false;
|
|
if (bAlarmRecordArray[n].getAckState() != BAckState.ackPending) {
|
|
bl = true;
|
|
}
|
|
boolean bl2 = bl;
|
|
bAlarmRecordArray[n].setUser(context.getUser().getUsername());
|
|
bAlarmRecordArray[n].setAckTime(BAbsTime.now());
|
|
bAlarmRecordArray[n].setAckState(BAckState.ackPending);
|
|
if (bl2) {
|
|
bAlarmDatabase.update(bAlarmRecordArray[n]);
|
|
}
|
|
bAlarmService.ackAlarm(bAlarmRecordArray[n]);
|
|
}
|
|
++n;
|
|
}
|
|
}
|
|
|
|
public final void doAddNotes(BComponent bComponent, Context context) throws Exception {
|
|
if (log.isTraceOn()) {
|
|
log.trace("Add Notes to alarms");
|
|
}
|
|
BAlarmService bAlarmService = (BAlarmService)Sys.getService((Type)BAlarmService.TYPE);
|
|
StringBuffer stringBuffer = new StringBuffer();
|
|
stringBuffer.append("##");
|
|
stringBuffer.append(BAbsTime.now().toString());
|
|
stringBuffer.append(" - ");
|
|
stringBuffer.append(context.getUser().getName());
|
|
stringBuffer.append(" ##\n");
|
|
stringBuffer.append(((BString)bComponent.get("notes")).toString());
|
|
BAlarmRecord[] bAlarmRecordArray = this.getAlarmRecords(bAlarmService, bComponent);
|
|
int n = 0;
|
|
while (n < bAlarmRecordArray.length) {
|
|
if (this.hasPermissions(bAlarmService, bAlarmRecordArray[n], BPermissions.operatorWrite, context)) {
|
|
String string = bAlarmRecordArray[n].getAlarmData().gets("notes", "");
|
|
bAlarmRecordArray[n].setAlarmData(BFacets.make((BFacets)bAlarmRecordArray[n].getAlarmData(), (String)"notes", (BIDataValue)BString.make((String)(stringBuffer + string))));
|
|
bAlarmRecordArray[n].setLastUpdate(BAbsTime.now());
|
|
bAlarmService.routeAlarm(bAlarmRecordArray[n]);
|
|
bAlarmService.doRouteToSource(bAlarmRecordArray[n]);
|
|
}
|
|
++n;
|
|
}
|
|
}
|
|
|
|
public final void doExpire(Context context) {
|
|
if (log.isTraceOn()) {
|
|
log.trace("Expiring Alarm Console Model: " + this.toPathString());
|
|
}
|
|
this.getConsole().remove((BComplex)this);
|
|
}
|
|
|
|
public final void doForceClear(BComponent bComponent, Context context) throws Exception {
|
|
if (log.isTraceOn()) {
|
|
log.trace("Alarm force clear");
|
|
}
|
|
BAlarmService bAlarmService = (BAlarmService)Sys.getService((Type)BAlarmService.TYPE);
|
|
BAlarmDatabase bAlarmDatabase = bAlarmService.getAlarmDb();
|
|
BUser bUser = context.getUser();
|
|
BPermissions bPermissions = bUser.getPermissionsFor((BIProtected)this.getConsole());
|
|
if (!bPermissions.has(BPermissions.adminWrite) && !bPermissions.has(BPermissions.adminInvoke)) {
|
|
throw new PermissionException(bPermissions + " < " + BPermissions.adminWrite);
|
|
}
|
|
BAlarmRecord[] bAlarmRecordArray = this.getAlarmRecords(bAlarmService, bComponent);
|
|
int n = 0;
|
|
while (n < bAlarmRecordArray.length) {
|
|
BAlarmRecord bAlarmRecord = bAlarmRecordArray[n];
|
|
BAlarmClass bAlarmClass = bAlarmService.lookupAlarmClass(bAlarmRecord.getAlarmClass());
|
|
if (bAlarmClass == null) {
|
|
bAlarmClass = bAlarmService.getDefaultAlarmClass();
|
|
}
|
|
if (bUser.getPermissionsFor((BIProtected)bAlarmClass).has(BPermissions.adminWrite)) {
|
|
bAlarmRecord.addAlarmFacet("forceCleared", (BIDataValue)BString.make((String)bUser.getUsername()));
|
|
if (bAlarmRecord.getAckTime().equals((Object)BAbsTime.NULL)) {
|
|
bAlarmRecord.setAckTime(BAbsTime.now());
|
|
}
|
|
if (bAlarmRecord.getNormalTime().equals((Object)BAbsTime.NULL)) {
|
|
bAlarmRecord.setNormalTime(BAbsTime.now());
|
|
}
|
|
if (!bAlarmRecord.getAckState().equals((Object)BAckState.acked)) {
|
|
bAlarmRecord.setUser(bUser.getUsername());
|
|
}
|
|
bAlarmRecord.setSourceState(BSourceState.normal);
|
|
bAlarmRecord.setAckState(BAckState.acked);
|
|
bAlarmDatabase.update(bAlarmRecord);
|
|
bAlarmService.invoke(BAlarmService.auditForceClear, (BValue)bAlarmRecord, context);
|
|
}
|
|
++n;
|
|
}
|
|
}
|
|
|
|
private final boolean hasPermissions(BAlarmService bAlarmService, BAlarmRecord bAlarmRecord, BPermissions bPermissions, Context context) {
|
|
BAlarmClass bAlarmClass = bAlarmService.lookupAlarmClass(bAlarmRecord.getAlarmClass());
|
|
if (bAlarmClass == null) {
|
|
bAlarmClass = bAlarmService.getDefaultAlarmClass();
|
|
}
|
|
return context.getUser().getPermissionsFor((BIProtected)bAlarmClass).has(bPermissions);
|
|
}
|
|
|
|
private final BConsoleRecipient getConsole() {
|
|
return (BConsoleRecipient)this.getParent();
|
|
}
|
|
|
|
static /* synthetic */ Class class(String string, boolean bl) {
|
|
try {
|
|
Class<?> clazz = Class.forName(string);
|
|
if (!bl) {
|
|
clazz = clazz.getComponentType();
|
|
}
|
|
return clazz;
|
|
}
|
|
catch (ClassNotFoundException classNotFoundException) {
|
|
throw new NoClassDefFoundError(classNotFoundException.getMessage());
|
|
}
|
|
}
|
|
|
|
private final /* synthetic */ void this() {
|
|
this.alarmMon = new Object();
|
|
this.started = false;
|
|
this.expireTicket = Clock.expiredTicket;
|
|
}
|
|
|
|
public BAlarmConsoleModel() {
|
|
this.this();
|
|
}
|
|
|
|
static {
|
|
Class clazz = class$com$tridium$alarm$model$BAlarmConsoleModel;
|
|
if (clazz == null) {
|
|
clazz = class$com$tridium$alarm$model$BAlarmConsoleModel = BAlarmConsoleModel.class("[Lcom.tridium.alarm.model.BAlarmConsoleModel;", false);
|
|
}
|
|
TYPE = Sys.loadType((Class)clazz);
|
|
expiryTime = BRelTime.makeSeconds((int)60);
|
|
log = Log.getLog((String)"alarm.alarmConsoleModel");
|
|
}
|
|
}
|
|
|