All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gurux.dlms.objects.GXDLMSCharge Maven / Gradle / Ivy

There is a newer version: 4.0.72
Show newest version
//
// --------------------------------------------------------------------------
//  Gurux Ltd
// 
//
//
// Filename:        $HeadURL$
//
// Version:         $Revision$,
//                  $Date$
//                  $Author$
//
// Copyright (c) Gurux Ltd
//
//---------------------------------------------------------------------------
//
//  DESCRIPTION
//
// This file is a part of Gurux Device Framework.
//
// Gurux Device Framework is Open Source software; you can redistribute it
// and/or modify it under the terms of the GNU General Public License 
// as published by the Free Software Foundation; version 2 of the License.
// Gurux Device Framework is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of 
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
// See the GNU General Public License for more details.
//
// More information of Gurux products: https://www.gurux.org
//
// This code is licensed under the GNU General Public License v2. 
// Full text may be retrieved at http://www.gnu.org/licenses/gpl-2.0.txt
//---------------------------------------------------------------------------

package gurux.dlms.objects;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

import javax.xml.stream.XMLStreamException;

import gurux.dlms.GXBitString;
import gurux.dlms.GXByteBuffer;
import gurux.dlms.GXDLMSClient;
import gurux.dlms.GXDLMSSettings;
import gurux.dlms.GXDateTime;
import gurux.dlms.ValueEventArgs;
import gurux.dlms.enums.DataType;
import gurux.dlms.enums.ErrorCode;
import gurux.dlms.enums.ObjectType;
import gurux.dlms.internal.GXCommon;
import gurux.dlms.objects.enums.ChargeConfiguration;
import gurux.dlms.objects.enums.ChargeType;

/**
 * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge */ public class GXDLMSCharge extends GXDLMSObject implements IGXDLMSBase { /** * Total amount paid.
* Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge */ private int totalAmountPaid; /** * Charge type.
* Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge */ private ChargeType chargeType; /** * Priority.
* Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge */ private byte priority; /** * Unit charge active.
* Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge */ private GXUnitCharge unitChargeActive; /** * Unit charge passive.
* Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge */ private GXUnitCharge unitChargePassive; /** * Unit charge activation time.
* Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge */ private GXDateTime unitChargeActivationTime; /** * Period.
* Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge */ private int period; /** * Charge configuration.
* Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge */ private java.util.Set chargeConfiguration; /** * Last collection time.
* Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge */ private GXDateTime lastCollectionTime; /** * Last collection amount.
* Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge */ private int lastCollectionAmount; /** * Total amount remaining.
* Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge */ private int totalAmountRemaining; /** * Proportion.
* Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge */ private int proportion; /** * Constructor. */ public GXDLMSCharge() { this("0.0.19.20.0.255", 0); } /** * Constructor. * * @param ln * Logical Name of the object. */ public GXDLMSCharge(final String ln) { this(ln, 0); } /** * Constructor. * * @param ln * Logical Name of the object. * @param sn * Short Name of the object. */ public GXDLMSCharge(final String ln, final int sn) { super(ObjectType.CHARGE, ln, sn); unitChargeActive = new GXUnitCharge(); unitChargePassive = new GXUnitCharge(); chargeType = ChargeType.CONSUMPTION_BASED_COLLECTION; chargeConfiguration = new HashSet(); } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @return Total amount paid. */ public final int getTotalAmountPaid() { return totalAmountPaid; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @param value * Total amount paid. */ public final void setTotalAmountPaid(final int value) { totalAmountPaid = value; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @return Charge type. */ public final ChargeType getChargeType() { return chargeType; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @param value * Charge type. */ public final void setChargeType(final ChargeType value) { chargeType = value; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @return Priority */ public final byte getPriority() { return priority; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @param value * Priority */ public final void setPriority(final byte value) { priority = value; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @return Unit charge active. */ public final GXUnitCharge getUnitChargeActive() { return unitChargeActive; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @param value * Unit charge active. */ public final void setUnitChargeActive(final GXUnitCharge value) { unitChargeActive = value; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @return Unit charge passive. */ public final GXUnitCharge getUnitChargePassive() { return unitChargePassive; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @param value * Unit charge passive. */ public final void setUnitChargePassive(final GXUnitCharge value) { unitChargePassive = value; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @return Unit charge activation time. */ public final GXDateTime getUnitChargeActivationTime() { return unitChargeActivationTime; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @param value * Unit charge activation time. */ public final void setUnitChargeActivationTime(final GXDateTime value) { unitChargeActivationTime = value; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @return Period. */ public final int getPeriod() { return period; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @param value * Period. */ public final void setPeriod(final int value) { period = value; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @return Charge configuration. */ public final java.util.Set getChargeConfiguration() { return chargeConfiguration; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @param value * Charge configuration. */ public final void setChargeConfiguration(final java.util.Set value) { chargeConfiguration = value; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @return Last collection time. */ public final GXDateTime getLastCollectionTime() { return lastCollectionTime; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @param value * Last collection time. */ public final void setLastCollectionTime(final GXDateTime value) { lastCollectionTime = value; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @return Last collection amount. */ public final int getLastCollectionAmount() { return lastCollectionAmount; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @param value * Last collection amount. */ public final void setLastCollectionAmount(final int value) { lastCollectionAmount = value; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @return Total amount remaining */ public final int getTotalAmountRemaining() { return totalAmountRemaining; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @param value * Total amount remaining */ public final void setTotalAmountRemaining(final int value) { totalAmountRemaining = value; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @return Proportion */ public final int getProportion() { return proportion; } /** * Online help:
* https://www.gurux.fi/Gurux.DLMS.Objects.GXDLMSCharge * * @param value * Proportion */ public final void setProportion(final int value) { proportion = value; } @Override public final Object[] getValues() { return new Object[] { getLogicalName(), totalAmountPaid, chargeType, priority, unitChargeActive, unitChargePassive, unitChargeActivationTime, period, chargeConfiguration, lastCollectionTime, lastCollectionAmount, totalAmountRemaining, proportion }; } /* * Returns collection of attributes to read. If attribute is static and * already read or device is returned HW error it is not returned. */ @Override public final int[] getAttributeIndexToRead(final boolean all) { java.util.ArrayList attributes = new java.util.ArrayList(); // LN is static and read only once. if (all || getLogicalName() == null || getLogicalName().compareTo("") == 0) { attributes.add(1); } // TotalAmountPaid if (all || canRead(2)) { attributes.add(2); } // ChargeType if (all || canRead(3)) { attributes.add(3); } // Priority if (all || canRead(4)) { attributes.add(4); } // UnitChargeActive if (all || canRead(5)) { attributes.add(5); } // UnitChargePassive if (all || canRead(6)) { attributes.add(6); } // UnitChargeActivationTime if (all || canRead(7)) { attributes.add(7); } // Period if (all || canRead(8)) { attributes.add(8); } // ChargeConfiguration if (all || canRead(9)) { attributes.add(9); } // LastCollectionTime if (all || canRead(10)) { attributes.add(10); } // LastCollectionAmount if (all || canRead(11)) { attributes.add(11); } // TotalAmountRemaining if (all || canRead(12)) { attributes.add(12); } // Proportion if (all || canRead(13)) { attributes.add(13); } return GXDLMSObjectHelpers.toIntArray(attributes); } /* * Returns amount of attributes. */ @Override public final int getAttributeCount() { return 13; } /* * Returns amount of methods. */ @Override public final int getMethodCount() { return 5; } @Override public final DataType getDataType(final int index) { switch (index) { case 1: return DataType.OCTET_STRING; case 2: return DataType.INT32; case 3: return DataType.ENUM; case 4: return DataType.UINT8; case 5: return DataType.STRUCTURE; case 6: return DataType.STRUCTURE; case 7: return DataType.OCTET_STRING; case 8: return DataType.UINT32; case 9: return DataType.BITSTRING; case 10: return DataType.DATETIME; case 11: return DataType.INT32; case 12: return DataType.INT32; case 13: return DataType.UINT16; default: throw new IllegalArgumentException("getDataType failed. Invalid attribute index."); } } @Override public final DataType getUIDataType(final int index) { if (index == 7 || index == 10) { return DataType.DATETIME; } return super.getUIDataType(index); } private static byte[] getUnitCharge(GXUnitCharge charge) { GXByteBuffer bb = new GXByteBuffer(); bb.setUInt8(DataType.STRUCTURE.getValue()); bb.setUInt8(3); bb.setUInt8(DataType.STRUCTURE.getValue()); bb.setUInt8(2); GXCommon.setData(null, bb, DataType.INT8, charge.getChargePerUnitScaling().getCommodityScale()); GXCommon.setData(null, bb, DataType.INT8, charge.getChargePerUnitScaling().getPriceScale()); bb.setUInt8(DataType.STRUCTURE.getValue()); bb.setUInt8(3); if (charge.getCommodity().getTarget() == null) { GXCommon.setData(null, bb, DataType.UINT16, 0); bb.setUInt8(DataType.OCTET_STRING.getValue()); bb.setUInt8(6); bb.setUInt8(0); bb.setUInt8(0); bb.setUInt8(0); bb.setUInt8(0); bb.setUInt8(0); bb.setUInt8(0); GXCommon.setData(null, bb, DataType.INT8, 0); } else { GXCommon.setData(null, bb, DataType.UINT16, charge.getCommodity().getTarget().getObjectType().getValue()); GXCommon.setData(null, bb, DataType.OCTET_STRING, GXCommon .logicalNameToBytes(charge.getCommodity().getTarget().getLogicalName())); GXCommon.setData(null, bb, DataType.INT8, charge.getCommodity().getIndex()); } bb.setUInt8(DataType.ARRAY.getValue()); if (charge.getChargeTables() == null) { bb.setUInt8(0); } else { GXCommon.setObjectCount(charge.getChargeTables().length, bb); for (GXChargeTable it : charge.getChargeTables()) { bb.setUInt8(DataType.STRUCTURE.getValue()); bb.setUInt8(2); GXCommon.setData(null, bb, DataType.OCTET_STRING, it.getIndex()); GXCommon.setData(null, bb, DataType.INT16, it.getChargePerUnit()); } } return bb.array(); } /* * Returns value of given attribute. */ @Override public final Object getValue(final GXDLMSSettings settings, final ValueEventArgs e) { switch (e.getIndex()) { case 1: return GXCommon.logicalNameToBytes(getLogicalName()); case 2: return totalAmountPaid; case 3: return chargeType.getValue(); case 4: return priority; case 5: return getUnitCharge(unitChargeActive); case 6: return getUnitCharge(unitChargePassive); case 7: return unitChargeActivationTime; case 8: return period; case 9: return GXBitString.toBitString(ChargeConfiguration.toInteger(chargeConfiguration), 2); case 10: return lastCollectionTime; case 11: return lastCollectionAmount; case 12: return totalAmountRemaining; case 13: return proportion; default: e.setError(ErrorCode.READ_WRITE_DENIED); break; } return null; } private void setUnitCharge(final GXDLMSSettings settings, GXUnitCharge charge, Object value) { List tmp = (List) value; List tmp2 = (List) tmp.get(0); charge.getChargePerUnitScaling().setCommodityScale(((Number) tmp2.get(0)).shortValue()); charge.getChargePerUnitScaling().setPriceScale(((Number) tmp2.get(1)).shortValue()); tmp2 = (List) tmp.get(1); ObjectType ot = ObjectType.forValue(((Number) tmp2.get(0)).intValue()); String ln = GXCommon.toLogicalName(tmp2.get(1)); charge.getCommodity().setTarget(settings.getObjects().findByLN(ot, ln)); charge.getCommodity().setIndex(((Number) tmp2.get(2)).intValue()); List list = new ArrayList(); tmp2 = (List) tmp.get(2); for (Object tmp3 : tmp2) { List it = (List) tmp3; GXChargeTable item = new GXChargeTable(); item.setIndex(new String((byte[]) it.get(0))); item.setChargePerUnit(((Number) it.get(1)).shortValue()); list.add(item); } charge.setChargeTables(list.toArray(new GXChargeTable[0])); } /* * Set value of given attribute. */ @Override public final void setValue(final GXDLMSSettings settings, final ValueEventArgs e) { switch (e.getIndex()) { case 1: setLogicalName(GXCommon.toLogicalName(e.getValue())); break; case 2: totalAmountPaid = ((Number) e.getValue()).intValue(); break; case 3: chargeType = ChargeType.forValue(((Number) e.getValue()).intValue()); break; case 4: priority = ((Number) e.getValue()).byteValue(); break; case 5: setUnitCharge(settings, unitChargeActive, e.getValue()); break; case 6: setUnitCharge(settings, unitChargePassive, e.getValue()); break; case 7: if (e.getValue() instanceof GXDateTime) { unitChargeActivationTime = (GXDateTime) e.getValue(); } else { unitChargeActivationTime = (GXDateTime) GXDLMSClient .changeType((byte[]) e.getValue(), DataType.DATETIME, e.getSettings()); } break; case 8: period = ((Number) e.getValue()).intValue(); break; case 9: chargeConfiguration = ChargeConfiguration.forValue(((GXBitString) e.getValue()).toInteger()); break; case 10: if (e.getValue() instanceof GXDateTime) { lastCollectionTime = (GXDateTime) e.getValue(); } else { lastCollectionTime = (GXDateTime) GXDLMSClient.changeType((byte[]) e.getValue(), DataType.DATETIME, e.getSettings()); } break; case 11: lastCollectionAmount = ((Number) e.getValue()).intValue(); break; case 12: totalAmountRemaining = ((Number) e.getValue()).intValue(); break; case 13: proportion = ((Number) e.getValue()).intValue(); break; default: e.setError(ErrorCode.READ_WRITE_DENIED); break; } } private static void loadUnitChargeActive(GXXmlReader reader, String name, GXUnitCharge charge) { } @Override public final void load(final GXXmlReader reader) throws XMLStreamException { totalAmountPaid = reader.readElementContentAsInt("TotalAmountPaid"); chargeType = ChargeType.forValue(reader.readElementContentAsInt("ChargeType")); priority = (byte) reader.readElementContentAsInt("Priority"); loadUnitChargeActive(reader, "UnitChargeActive", unitChargeActive); loadUnitChargeActive(reader, "UnitChargePassive", unitChargePassive); unitChargeActivationTime = reader.readElementContentAsDateTime("UnitChargeActivationTime"); period = reader.readElementContentAsInt("Period"); chargeConfiguration = ChargeConfiguration.forValue(reader.readElementContentAsInt("ChargeConfiguration")); lastCollectionTime = reader.readElementContentAsDateTime("LastCollectionTime"); lastCollectionAmount = reader.readElementContentAsInt("LastCollectionAmount"); totalAmountRemaining = reader.readElementContentAsInt("TotalAmountRemaining"); proportion = reader.readElementContentAsInt("Proportion"); } private static void saveUnitChargeActive(GXXmlWriter writer, String name, GXUnitCharge charge) { } @Override public final void save(final GXXmlWriter writer) throws XMLStreamException { writer.writeElementString("TotalAmountPaid", totalAmountPaid); if (chargeType != null) { writer.writeElementString("ChargeType", chargeType.getValue()); } writer.writeElementString("Priority", priority); saveUnitChargeActive(writer, "UnitChargeActive", unitChargeActive); saveUnitChargeActive(writer, "UnitChargePassive", unitChargePassive); writer.writeElementString("UnitChargeActivationTime", unitChargeActivationTime); writer.writeElementString("Period", period); writer.writeElementString("ChargeConfiguration", ChargeConfiguration.toInteger(chargeConfiguration)); writer.writeElementString("LastCollectionTime", lastCollectionTime); writer.writeElementString("LastCollectionAmount", lastCollectionAmount); writer.writeElementString("TotalAmountRemaining", totalAmountRemaining); writer.writeElementString("Proportion", proportion); } @Override public final void postLoad(final GXXmlReader reader) { } @Override public String[] getNames() { return new String[] { "Logical Name", "TotalAmountPaid", "ChargeType", "Priority", "UnitChargeActive", "UnitChargePassive", "UnitChargeActivationTime", "Period", "ChargeConfiguration", "LastCollectionTime", "LastCollectionAmount", "TotalAmountRemaining", "Proportion" }; } @Override public String[] getMethodNames() { return new String[] { "Update unit charge", "Activate passive unit charge", "Collect", "Update total amount remaining", "Set total amount remaining" }; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy