code: @Override
      public void updateValue(final AttributeValue inValue) throws DevFailed {
          xlogger.entry(getName());
          // final Profiler profilerPeriod = new Profiler("read attribute " + name);
          // profilerPeriod.start("in");
          if (inValue == null) {
              throw DevFailedUtils.newDevFailed(ExceptionMessages.ATTR_VALUE_NOT_SET,
                      name + " read value has not been updated");
          }
  
          try {
              // copy value
              readValue = (AttributeValue) inValue.clone();
          } catch (final CloneNotSupportedException e) {
              throw DevFailedUtils.newDevFailed(e);
          }
  
          // update quality if necessary
          if (readValue.getValue() != null && !readValue.getQuality().equals(AttrQuality.ATTR_INVALID)) {
              updateQuality(readValue);
          }
          // profilerPeriod.start("clone");
  
          // profilerPeriod.stop().print();
          try {
              if (readValue.getValue() != null) {
                  // profilerPeriod.start("checkUpdateErrors");
                  checkUpdateErrors(readValue);
                  // profilerPeriod.start("from2DArrayToArray");
                  // get as array if necessary (for image)
                  readValue.setValueWithoutDim(ArrayUtils.from2DArrayToArray(readValue.getValue()));
                  // force conversion to check types
                  // profilerPeriod.start("toAttributeValue5");
                  TangoIDLAttributeUtil.toAttributeValue5(this, readValue, null);
              } else {
                  throw DevFailedUtils.newDevFailed(ExceptionMessages.ATTR_VALUE_NOT_SET,
                          name + " read value has not been updated");
              }
              // profilerPeriod.start("updateDefaultWritePart");
              updateDefaultWritePart();
              // profilerPeriod.stop().print();
  
          } catch (final DevFailed e) {
              // readValue.setQuality(AttrQuality.ATTR_INVALID);
              readValue.setXDim(0);
              readValue.setYDim(0);
              lastError = e;
              throw e;
          }
          xlogger.exit(getName());
      }
docs: set the read value
  
  @throws DevFailed