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.
200 lines
7.4 KiB
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;
|
|
}
|
|
}
|