ImmutableThingFromCopyBuilder implements ThingBuilder, ThingBuilder.FromCopy { @Override public FromCopy setFeatures(final JsonObject featuresJsonObject) { return setFeatures(ThingsModelFactory.newFeatures(featuresJsonObject)); } private  ImmutableThingFromCopyBuilder(); static ImmutableThingFromCopyBuilder of(final Thing thing); static ImmutableThingFromCopyBuilder of(final JsonObject jsonObject); @Override @Deprecated FromCopy setPermissions(final AuthorizationSubject authorizationSubject, final Permission permission,
            final Permission... furtherPermissions); @Override @Deprecated FromCopy setPermissions(final Predicate<AccessControlList> existingAclPredicate,
            final AuthorizationSubject authorizationSubject,
            final Permission permission,
            final Permission... furtherPermissions); @Override @Deprecated FromCopy setPermissions(final AuthorizationSubject authorizationSubject, final Permissions permissions); @Override @Deprecated FromCopy setPermissions(final Predicate<AccessControlList> existingAclPredicate,
            final AuthorizationSubject authorizationSubject, final Permissions permissions); @Override @Deprecated FromCopy setPermissions(final Iterable<AclEntry> aclEntries); @Override @Deprecated FromCopy setPermissions(final Predicate<AccessControlList> existingAclPredicate,
            final Iterable<AclEntry> aclEntries); @Override @Deprecated FromCopy setPermissions(final JsonObject accessControlListJsonObject); @Override @Deprecated FromCopy setPermissions(final Predicate<AccessControlList> existingAclPredicate,
            final JsonObject accessControlListJsonObject); @Override @Deprecated FromCopy setPermissions(final String accessControlListJsonString); @Override @Deprecated FromCopy setPermissions(final Predicate<AccessControlList> existingAclPredicate,
            final String accessControlListJsonString); @Override @Deprecated FromCopy setPermissions(final AclEntry aclEntry, final AclEntry... furtherAclEntries); @Override @Deprecated FromCopy setPermissions(final Predicate<AccessControlList> existingAclPredicate, final AclEntry aclEntry,
            final AclEntry... furtherAclEntries); @Override @Deprecated FromCopy removePermissionsOf(final AuthorizationSubject authorizationSubject); @Override @Deprecated FromCopy removePermissionsOf(final Predicate<AccessControlList> existingAclPredicate,
            final AuthorizationSubject authorizationSubject); @Override @Deprecated FromCopy removeAllPermissions(); @Override @Deprecated FromCopy removeAllPermissions(final Predicate<AccessControlList> existingAclPredicate); @Override FromCopy setPolicyId(@Nullable final PolicyId policyId); @Override FromCopy removePolicyId(); @Override FromCopy setAttributes(final Attributes attributes); @Override FromCopy setAttributes(final Predicate<Attributes> existingAttributesPredicate,
            final Attributes attributes); @Override FromCopy setAttributes(final JsonObject attributesJsonObject); @Override FromCopy setAttributes(final Predicate<Attributes> existingAttributesPredicate,
            final JsonObject attributesJsonObject); @Override FromCopy setAttributes(final String attributesJsonString); @Override FromCopy setAttributes(final Predicate<Attributes> existingAttributesPredicate,
            final String attributesJsonString); @Override FromCopy removeAllAttributes(); @Override FromCopy removeAttribute(final JsonPointer attributePath); @Override FromCopy removeAttribute(final Predicate<Attributes> existingAttributesPredicate,
            final JsonPointer attributePath); @Override FromCopy removeAllAttributes(final Predicate<Attributes> existingAttributesPredicate); @Override FromCopy setNullAttributes(); @Override FromCopy setAttribute(final JsonPointer attributePath, final JsonValue attributeValue); @Override FromCopy setAttribute(final Predicate<Attributes> existingAttributesPredicate,
            final JsonPointer attributePath, final JsonValue attributeValue); @Override FromCopy setDefinition(@Nullable final ThingDefinition definition); @Override FromCopy setNullDefinition(); @Override FromCopy removeDefinition(); @Override FromCopy setFeature(final Feature feature); @Override FromCopy setFeature(final Predicate<Features> existingFeaturesPredicate, final Feature feature); @Override FromCopy setFeature(final String featureId); @Override FromCopy setFeature(final Predicate<Features> existingFeaturesPredicate, final String featureId); @Override FromCopy removeFeature(final String featureId); @Override FromCopy removeFeature(final Predicate<Features> existingFeaturesPredicate, final String featureId); @Override FromCopy setFeature(final Predicate<Features> existingFeaturesPredicate,
            final String featureId,
            final FeatureDefinition featureDefinition,
            final FeatureProperties featureProperties); @Override FromCopy setFeature(final String featureId, final FeatureDefinition featureDefinition,
            final FeatureProperties featureProperties); @Override FromCopy setFeature(final String featureId, final FeatureProperties featureProperties); @Override FromCopy setFeature(final Predicate<Features> existingFeaturesPredicate, final String featureId,
            final FeatureProperties featureProperties); @Override FromCopy setFeatureDefinition(final Predicate<Features> existingFeaturesPredicate, final String featureId,
            final FeatureDefinition featureDefinition); @Override FromCopy removeFeatureDefinition(final String featureId); @Override FromCopy setFeatureProperty(final String featureId, final JsonPointer propertyPath,
            final JsonValue propertyValue); @Override FromCopy setFeatureProperty(final Predicate<Features> existingFeaturesPredicate,
            final String featureId,
            final JsonPointer propertyPath,
            final JsonValue propertyValue); @Override FromCopy removeFeatureProperty(final String featureId, final JsonPointer propertyPath); @Override FromCopy removeFeatureProperty(final Predicate<Features> existingFeaturesPredicate, final String featureId,
            final JsonPointer propertyPath); @Override FromCopy setFeatureProperties(final Predicate<Features> existingFeaturesPredicate, final String featureId,
            final FeatureProperties featureProperties); @Override FromCopy removeFeatureProperties(final Predicate<Features> existingFeaturesPredicate,
            final String featureId); @Override FromCopy setFeatures(final JsonObject featuresJsonObject); @Override FromCopy setFeatures(final Predicate<Features> existingFeaturesPredicate,
            final JsonObject featuresJsonObject); @Override FromCopy setFeatures(final String featuresJsonString); @Override FromCopy setFeatures(final Predicate<Features> existingFeaturesPredicate, final String featuresJsonString); @Override FromCopy setFeatures(final Iterable<Feature> features); @Override FromCopy setFeatures(final Predicate<Features> existingFeaturesPredicate, final Iterable<Feature> features); @Override FromCopy removeAllFeatures(); @Override FromCopy removeAllFeatures(final Predicate<Features> existingFeaturesPredicate); @Override FromCopy setNullFeatures(); @Override FromCopy setLifecycle(@Nullable final ThingLifecycle lifecycle); @Override FromCopy setLifecycle(final Predicate<ThingLifecycle> existingLifecyclePredicate,
            @Nullable final ThingLifecycle lifecycle); @Override FromCopy setRevision(@Nullable final ThingRevision revision); @Override FromCopy setRevision(final Predicate<ThingRevision> existingRevisionPredicate,
            @Nullable final ThingRevision revision); @Override FromCopy setRevision(final long revisionNumber); @Override FromCopy setRevision(final Predicate<ThingRevision> existingRevisionPredicate, final long revisionNumber); @Override FromCopy setModified(@Nullable final Instant modified); @Override FromCopy setModified(final Predicate<Instant> existingModifiedPredicate, @Nullable final Instant modified); @Override FromCopy setCreated(@Nullable final Instant created); @Override FromCopy setCreated(final Predicate<Instant> existingCreatedPredicate, @Nullable final Instant created); @Override FromCopy setMetadata(@Nullable final Metadata metadata); @Override FromCopy setMetadata(final Predicate<Metadata> existingMetadataPredicate,
            @Nullable final Metadata metadata); @Override FromCopy setId(@Nullable final String thingId); @Override FromCopy setId(@Nullable final ThingId thingId); @Override FromCopy setId(final Predicate<ThingId> existingIdPredicate, @Nullable final ThingId thingId); @Override FromCopy setGeneratedId(); @Override FromCopy setGeneratedId(final Predicate<ThingId> existingIdPredicate); @Override Thing build();  }
@Test(expected = NullPointerException.class) public void tryToSetFeaturesWithNullIterable() { underTestV1.setFeatures((Iterable<Feature>) null); }
@Test public void setFeatures() { underTestV1.setFeatures(FEATURES); final Thing thing = underTestV1.build(); assertThat(thing).hasFeatures(FEATURES); }
@Test(expected = NullPointerException.class) public void tryToSetFeaturesFromNullJsonObject() { underTestV1.setFeatures((JsonObject) null); }
@Test(expected = DittoJsonException.class) public void tryToSetFeaturesFromNullJsonString() { underTestV1.setFeatures((String) null); }
@Test(expected = DittoJsonException.class) public void tryToSetFeaturesFromEmptyJsonString() { underTestV1.setFeatures(""); }