You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
backend/src/main/java/com/beanit/iec61850bean/clientgui/DataObjectTreeNode.java

200 lines
7.4 KiB
Java

/*
* Copyright 2011 The IEC61850bean Authors
*
* Licensed 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 com.beanit.iec61850bean.clientgui;
import com.beanit.iec61850bean.BasicDataAttribute;
import com.beanit.iec61850bean.BdaBoolean;
import com.beanit.iec61850bean.BdaCheck;
import com.beanit.iec61850bean.BdaDoubleBitPos;
import com.beanit.iec61850bean.BdaEntryTime;
import com.beanit.iec61850bean.BdaFloat32;
import com.beanit.iec61850bean.BdaFloat64;
import com.beanit.iec61850bean.BdaInt16;
import com.beanit.iec61850bean.BdaInt16U;
import com.beanit.iec61850bean.BdaInt32;
import com.beanit.iec61850bean.BdaInt32U;
import com.beanit.iec61850bean.BdaInt64;
import com.beanit.iec61850bean.BdaInt8;
import com.beanit.iec61850bean.BdaInt8U;
import com.beanit.iec61850bean.BdaOctetString;
import com.beanit.iec61850bean.BdaOptFlds;
import com.beanit.iec61850bean.BdaQuality;
import com.beanit.iec61850bean.BdaReasonForInclusion;
import com.beanit.iec61850bean.BdaTapCommand;
import com.beanit.iec61850bean.BdaTimestamp;
import com.beanit.iec61850bean.BdaTriggerConditions;
import com.beanit.iec61850bean.BdaUnicodeString;
import com.beanit.iec61850bean.BdaVisibleString;
import com.beanit.iec61850bean.ClientAssociation;
import com.beanit.iec61850bean.Fc;
import com.beanit.iec61850bean.FcModelNode;
import com.beanit.iec61850bean.ModelNode;
import com.beanit.iec61850bean.ServiceError;
import com.beanit.iec61850bean.clientgui.databind.BooleanDataBind;
import com.beanit.iec61850bean.clientgui.databind.CheckDataBind;
import com.beanit.iec61850bean.clientgui.databind.DoubleBitPosDataBind;
import com.beanit.iec61850bean.clientgui.databind.EntryTimeDataBind;
import com.beanit.iec61850bean.clientgui.databind.Float32DataBind;
import com.beanit.iec61850bean.clientgui.databind.Float64DataBind;
import com.beanit.iec61850bean.clientgui.databind.Int16DataBind;
import com.beanit.iec61850bean.clientgui.databind.Int16UDataBind;
import com.beanit.iec61850bean.clientgui.databind.Int32DataBind;
import com.beanit.iec61850bean.clientgui.databind.Int32UDataBind;
import com.beanit.iec61850bean.clientgui.databind.Int64DataBind;
import com.beanit.iec61850bean.clientgui.databind.Int8DataBind;
import com.beanit.iec61850bean.clientgui.databind.Int8UDataBind;
import com.beanit.iec61850bean.clientgui.databind.OctetStringDataBind;
import com.beanit.iec61850bean.clientgui.databind.OptfldsDataBind;
import com.beanit.iec61850bean.clientgui.databind.QualityDataBind;
import com.beanit.iec61850bean.clientgui.databind.ReasonForInclusionDataBind;
import com.beanit.iec61850bean.clientgui.databind.TapCommandDataBind;
import com.beanit.iec61850bean.clientgui.databind.TimeStampDataBind;
import com.beanit.iec61850bean.clientgui.databind.TriggerConditionDataBind;
import com.beanit.iec61850bean.clientgui.databind.UnicodeStringDataBind;
import com.beanit.iec61850bean.clientgui.databind.VisibleStringDataBind;
import java.io.IOException;
import javax.swing.tree.DefaultMutableTreeNode;
public class DataObjectTreeNode extends DefaultMutableTreeNode implements DataTreeNode {
private static final long serialVersionUID = -3596243932937737877L;
private final ModelNode node;
private final BasicDataBind<?> data;
public DataObjectTreeNode(String name, ModelNode node) {
super(name);
this.node = node;
if (node != null && node.getChildren() == null) {
// for (ModelNode child : node.getChildren()) {
// if (child instanceof BasicDataAttribute) {
// data.add(createDataBind((BasicDataAttribute) child));
// }
// }
data = createDataBind((BasicDataAttribute) node);
} else {
data = null;
}
}
private static BasicDataBind<?> createDataBind(BasicDataAttribute bda) {
switch (bda.getBasicType()) {
case BOOLEAN:
return new BooleanDataBind((BdaBoolean) bda);
case ENTRY_TIME:
return new EntryTimeDataBind((BdaEntryTime) bda);
case FLOAT32:
return new Float32DataBind((BdaFloat32) bda);
case FLOAT64:
return new Float64DataBind((BdaFloat64) bda);
case INT16:
return new Int16DataBind((BdaInt16) bda);
case INT16U:
return new Int16UDataBind((BdaInt16U) bda);
case INT32:
return new Int32DataBind((BdaInt32) bda);
case INT32U:
return new Int32UDataBind((BdaInt32U) bda);
case INT64:
return new Int64DataBind((BdaInt64) bda);
case INT8:
return new Int8DataBind((BdaInt8) bda);
case INT8U:
return new Int8UDataBind((BdaInt8U) bda);
case OCTET_STRING:
return new OctetStringDataBind((BdaOctetString) bda);
case TIMESTAMP:
return new TimeStampDataBind((BdaTimestamp) bda);
case UNICODE_STRING:
return new UnicodeStringDataBind((BdaUnicodeString) bda);
case VISIBLE_STRING:
return new VisibleStringDataBind((BdaVisibleString) bda);
case CHECK:
return new CheckDataBind((BdaCheck) bda);
case DOUBLE_BIT_POS:
return new DoubleBitPosDataBind((BdaDoubleBitPos) bda);
case OPTFLDS:
return new OptfldsDataBind((BdaOptFlds) bda);
case QUALITY:
return new QualityDataBind((BdaQuality) bda);
case REASON_FOR_INCLUSION:
return new ReasonForInclusionDataBind((BdaReasonForInclusion) bda);
case TAP_COMMAND:
return new TapCommandDataBind((BdaTapCommand) bda);
case TRIGGER_CONDITIONS:
return new TriggerConditionDataBind((BdaTriggerConditions) bda);
default:
throw new IllegalArgumentException("BasicType " + bda.getBasicType() + " unknown");
}
}
public ModelNode getNode() {
return node;
}
@Override
public BasicDataBind<?> getData() {
return data;
}
@Override
public void reset(ClientAssociation association) throws ServiceError, IOException {
if (association != null) {
association.getDataValues((FcModelNode) node);
}
if (data != null) {
data.reset();
} else {
for (int i = 0; i < getChildCount(); i++) {
if (getChildAt(i) instanceof DataObjectTreeNode) {
DataTreeNode child = (DataTreeNode) getChildAt(i);
child.reset(null);
}
}
}
}
@Override
public void writeValues(ClientAssociation association) throws ServiceError, IOException {
if (data != null) {
data.write();
} else {
for (int i = 0; i < getChildCount(); i++) {
if (getChildAt(i) instanceof DataObjectTreeNode) {
DataTreeNode child = (DataTreeNode) getChildAt(i);
child.writeValues(null);
}
}
}
if (association != null) {
association.setDataValues((FcModelNode) node);
}
}
@Override
public boolean writable() {
if (node instanceof FcModelNode) {
FcModelNode modelNode = (FcModelNode) node;
Fc constraint = modelNode.getFc();
return constraint != Fc.ST && constraint != Fc.MX;
}
return false;
}
@Override
public boolean readable() {
return node instanceof FcModelNode;
}
}